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方法的信号

例如:

  1. 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)
  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)
  4. 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)
  5. flask.request_tearing_down:请求被销毁的时候发送,即使在请求过程中发生异常,也会发送,示例代码如下:

        def log_request_tearing_down(sender,**kwargs):
    print ('coming...')
    request_tearing_down.connect(log_request_tearing_down,app)
  6. flask.appcontext_tearing_down:在应用上下文销毁的时候发送,它总是会被调用,即使发生异常。示例代码如下:

        def log_appcontext_tearing_down(sender,**kwargs):
    print ('coming...')
    appcontext_tearing_down.connect(log_appcontext_tearing_down,app)

flask信号使用的更多相关文章

  1. 信号(Django信号、Flask信号、Scrapy信号)

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  2. Flask —— 信号(5)

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

  3. 了解Flask 信号机制

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

  4. flask—信号(blinker)

    Flask框架中的信号基于blinker,主要是让开发者在flask请求过程中定制一些用户行为. 安装blinker pip3 install blinker 1.内置信号 request_start ...

  5. 22、Flask实战第22天:Flask信号

    Flask中的信号使用的是一个第三方插件blinker.通过pip list看一下是否安装,如果没有,则使用如下命令安装 pip install blinker 自定义信号 自定义信号分为3步: ①定 ...

  6. flask信号

    骚师博客:信号 信号你就可以这么理解,请求比喻成赛车,请求走的流程就是赛车道,而信号坐落在赛车道上的加油站和维修站,信号注册的函数好比维修站的人,每经过维修站并且维修站里有人就进行维修 信号这里理解: ...

  7. Flask信号流程

    首先先我们来看看Flask里面的信号是什么样的,我们可以找到一个叫signals.py的文件 这里面是所有定义了的后面请求流程中会用到的信号 二.哪些地方用到了信号 1.请求app上下文时执行的,在执 ...

  8. 七十四:flask信号之flask的内置信号

    flask所有的内置信号 1.template_rendered:模板渲染完成后的信号2.before_render_template:模板渲染之前的信号3.request_started:模板开始渲 ...

  9. 七十三:flask信号之信号机制和使用场景

    若安装flask是未默认安装blinker,则pip install blinker 使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号 1.定义信号:定义信号需要使用到bl ...

随机推荐

  1. 2018.11.06 洛谷P1941 飞扬的小鸟(背包)

    传送门 上升看成完全背包. 下降看成01背包. 注意边界转移就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int ...

  2. Win7 VS2015环境编译cegui-0.8.5

    首先是去官网下载源码与依赖库 http://cegui.org.uk/ 然后得提一下,编译DX11版本带Effects11框架的话会有问题,也就是默认情况编译有问题,这是因为VS2015升级后编译器对 ...

  3. mathematica入门学习记录:

    http://v.qq.com/vplus/4bc1736725fc7c3567d5bd9617482a49/foldervideos/m8k0000011aqj4k mathematica的数据 简 ...

  4. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  5. HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法

    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...

  6. poj1741(点分模板)

    #include<iostream> #include<cstring> #include<cmath> #include<cstdio> #inclu ...

  7. H5总结

    1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...

  8. uint8_t / uint16_t / uint32_t /uint64_t

    这些数据类型是 C99 中定义的,它就是一个结构的标注,可理解为type/typedef的缩写,表示通过typedef定义.它们只是使用typedef给类型起的别名 #ifndef _UINT8_T ...

  9. (完全背包) Piggy-Bank (hdu 1114)

    题目大意:              告诉你钱罐的初始重量和装满的重量, 你可以得到这个钱罐可以存放钱币的重量,下面有 n 种钱币, n 组, 每组告诉你这种金币的价值和它的重量,问你是否可以将这个钱 ...

  10. bootstrap 图片切换

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...