flask信号使用
flask信号:
安装:
flask中的信号使用的是一个第三方插件,叫做blinker。通过pip list看一下,如果没有安装,通过以下命令即可安装blinker:
pip install blinker
自定义信号:
分为三步:1.创建信号 2.监听信号 3.发送信号
定义信号:定义信号需要使用到blinker这个包的Namespace类来创建一个命名空间。比如定义一个在访问了某个视图函数的时候的信号。示例代码如下:
#1.定义信号
Myspace = Namespace()
fire_signal = Myspace.signal('fire') #fire为信号名称
监听信号:监听信号使用singal对象的connect方法,在这个方法中需要传递一个函数,用来接收以后监听到这个信号该做的事情。示例代码如下:
def fire_bullet(sender,username):
print('开始射击')
print(username)
fire_signal.connect(fire_bullet)
发送信号:发送信号使用singal对象的send方法,这个方法可以传递一些其他参数过去。示例代码如下:
#3.发送信号
fire_signal.send(username='xxxxxx')
#encoding:utf-8
# __author__ = 'donghao'
# __time__ = 2019/1/3 19:22
from blinker import Namespace
#Namespace命名空间
#1.定义信号
Myspace = Namespace()
fire_signal = Myspace.signal('fire') #fire为信号名称
# 2.监听信号
# fire_bullet 接受参数:发送者sender
def fire_bullet(sender,username):
print(sender)
print('开始射击')
print(username)
fire_signal.connect(fire_bullet)
#3.发送信号
fire_signal.send('xxx',username='donghao')
内置信号:
template_rendered = _signals.signal('template-rendered')#模板渲染完成的信号
before_render_template = _signals.signal('before-render-template') #模板渲染前的信号
request_started = _signals.signal('request-started') #模板开始渲染
request_finished = _signals.signal('request-finished') #模板渲染完成
request_tearing_down = _signals.signal('request-tearing-down') #request对象被销毁的信号
got_request_exception = _signals.signal('got-request-exception') #视图函数发生异常的信号
appcontext_tearing_down = _signals.signal('appcontext-tearing-down') #app上下文被摧毁的信号
appcontext_pushed = _signals.signal('appcontext-pushed')#app上下文被推入栈上的信号
appcontext_popped = _signals.signal('appcontext-popped')#app上下文被推出栈上的信号
message_flashed = _signals.signal('message-flashed')#flask的flush方法的信号
例如:
flask.template_rendered:模版渲染完毕后发送,示例如下:from flask import template_rendered
def log_template_renders(sender,template,context,*args):
print( 'sender:',sender)
print ('template:',template)
print ('context:',context) template_rendered.connect(log_template_renders,app)
flask.request_started:请求开始之前,在到达视图函数之前发送,订阅者可以调用request之类的标准全局代理访问请求。示例如下:def log_request_started(sender,**extra):
print('sender:',sender)
print('extra:',extra)
request_started.connect(log_request_started,app)
flask.request_finished:请求结束时,在响应发送给客户端之前发送,可以传递response,示例代码如下:def log_request_finished(sender,response,*args):
print( 'response:',response)
request_finished.connect(log_request_finished,app)
flask.got_request_exception:在请求过程中抛出异常时发送,异常本身会通过exception传递到订阅的函数。示例代码如下:def log_exception_finished(sender,exception,*args):
print ('sender:',sender)
print (type(exception))
got_request_exception.connect(log_exception_finished,app)
flask.request_tearing_down:请求被销毁的时候发送,即使在请求过程中发生异常,也会发送,示例代码如下:def log_request_tearing_down(sender,**kwargs):
print ('coming...')
request_tearing_down.connect(log_request_tearing_down,app)
flask.appcontext_tearing_down:在应用上下文销毁的时候发送,它总是会被调用,即使发生异常。示例代码如下:def log_appcontext_tearing_down(sender,**kwargs):
print ('coming...')
appcontext_tearing_down.connect(log_appcontext_tearing_down,app)
flask信号使用的更多相关文章
- 信号(Django信号、Flask信号、Scrapy信号)
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- Flask —— 信号(5)
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...
- 了解Flask 信号机制
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...
- flask—信号(blinker)
Flask框架中的信号基于blinker,主要是让开发者在flask请求过程中定制一些用户行为. 安装blinker pip3 install blinker 1.内置信号 request_start ...
- 22、Flask实战第22天:Flask信号
Flask中的信号使用的是一个第三方插件blinker.通过pip list看一下是否安装,如果没有,则使用如下命令安装 pip install blinker 自定义信号 自定义信号分为3步: ①定 ...
- flask信号
骚师博客:信号 信号你就可以这么理解,请求比喻成赛车,请求走的流程就是赛车道,而信号坐落在赛车道上的加油站和维修站,信号注册的函数好比维修站的人,每经过维修站并且维修站里有人就进行维修 信号这里理解: ...
- Flask信号流程
首先先我们来看看Flask里面的信号是什么样的,我们可以找到一个叫signals.py的文件 这里面是所有定义了的后面请求流程中会用到的信号 二.哪些地方用到了信号 1.请求app上下文时执行的,在执 ...
- 七十四:flask信号之flask的内置信号
flask所有的内置信号 1.template_rendered:模板渲染完成后的信号2.before_render_template:模板渲染之前的信号3.request_started:模板开始渲 ...
- 七十三:flask信号之信号机制和使用场景
若安装flask是未默认安装blinker,则pip install blinker 使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号 1.定义信号:定义信号需要使用到bl ...
随机推荐
- 2018.11.06 洛谷P1941 飞扬的小鸟(背包)
传送门 上升看成完全背包. 下降看成01背包. 注意边界转移就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int ...
- Win7 VS2015环境编译cegui-0.8.5
首先是去官网下载源码与依赖库 http://cegui.org.uk/ 然后得提一下,编译DX11版本带Effects11框架的话会有问题,也就是默认情况编译有问题,这是因为VS2015升级后编译器对 ...
- mathematica入门学习记录:
http://v.qq.com/vplus/4bc1736725fc7c3567d5bd9617482a49/foldervideos/m8k0000011aqj4k mathematica的数据 简 ...
- Java实现FTP批量大文件上传下载篇1
本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...
- HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法
最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...
- poj1741(点分模板)
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #inclu ...
- H5总结
1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...
- uint8_t / uint16_t / uint32_t /uint64_t
这些数据类型是 C99 中定义的,它就是一个结构的标注,可理解为type/typedef的缩写,表示通过typedef定义.它们只是使用typedef给类型起的别名 #ifndef _UINT8_T ...
- (完全背包) Piggy-Bank (hdu 1114)
题目大意: 告诉你钱罐的初始重量和装满的重量, 你可以得到这个钱罐可以存放钱币的重量,下面有 n 种钱币, n 组, 每组告诉你这种金币的价值和它的重量,问你是否可以将这个钱 ...
- bootstrap 图片切换
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...