文章网建站,软件开发课程,郑州做企业网站的公司,三维家是在网站上做还是在app上安装#xff1a;
flask中的信号使用的是一个第三方插件#xff0c;叫做blinker。通过pip list看一下#xff0c;如果没有安装#xff0c;通过以下命令即可安装blinker#xff1a;
pip install blinker
flask其中有内置的信号
template_rendered _signals.signal(temp…安装
flask中的信号使用的是一个第三方插件叫做blinker。通过pip list看一下如果没有安装通过以下命令即可安装blinker
pip install blinker
flask其中有内置的信号
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方法的信号
例子
1.flask.template_rendered模版渲染完毕后发送示例如下 from flask import template_rendered #定义函数写在__init__中def log_template_renders(sender,template,context,*args): #定义函数print( sender:,sender)print (template:,template)print (context:,context)template_rendered.connect(log_template_renders,app) #绑定函数
2.flask.request_started请求开始之前在到达视图函数之前发送订阅者可以调用request之类的标准全局代理访问请求。示例如下 def log_request_started(sender,**extra):print(sender:,sender)print(extra:,extra)request_started.connect(log_request_started,app)
3.flask.request_finished请求结束时在响应发送给客户端之前发送可以传递response示例代码如下 def log_request_finished(sender,response,*args):print( response:,response)request_finished.connect(log_request_finished,app)
自定义信号
分为三步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(usernamexxxxxx)
#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,usernamedonghao)