flask信号:

安装:

flask中的信号使用的是一个第三方插件,叫做blinker。通过pip list看一下,如果没有安装,通过以下命令即可安装blinker

pip install blinker

自定义信号:

分为三步:1.创建信号  2.监听信号  3.发送信号

定义信号:定义信号需要使用到blinker这个包的Namespace类来创建一个命名空间。比如定义一个在访问了某个视图函数的时候的信号。示例代码如下:

  1. #1.定义信号
  2. Myspace = Namespace()
  3. fire_signal = Myspace.signal('fire') #fire为信号名称

监听信号:监听信号使用singal对象的connect方法,在这个方法中需要传递一个函数,用来接收以后监听到这个信号该做的事情。示例代码如下:

  1. def fire_bullet(sender,username):
  2. print('开始射击')
  3. print(username)
  4. fire_signal.connect(fire_bullet)

发送信号:发送信号使用singal对象的send方法,这个方法可以传递一些其他参数过去。示例代码如下:

  1. #3.发送信号
  2. fire_signal.send(username='xxxxxx')
  1. #encoding:utf-8
  2. # __author__ = 'donghao'
  3. # __time__ = 2019/1/3 19:22
  4. from blinker import Namespace
  5. #Namespace命名空间
  6. #1.定义信号
  7. Myspace = Namespace()
  8. fire_signal = Myspace.signal('fire') #fire为信号名称
  9. # 2.监听信号
  10. # fire_bullet 接受参数:发送者sender
  11. def fire_bullet(sender,username):
  12. print(sender)
  13. print('开始射击')
  14. print(username)
  15. fire_signal.connect(fire_bullet)
  16. #3.发送信号
  17. fire_signal.send('xxx',username='donghao')

内置信号:

  1. template_rendered = _signals.signal('template-rendered')#模板渲染完成的信号
  2. before_render_template = _signals.signal('before-render-template') #模板渲染前的信号
  3. request_started = _signals.signal('request-started') #模板开始渲染
  4. request_finished = _signals.signal('request-finished') #模板渲染完成
  5. request_tearing_down = _signals.signal('request-tearing-down') #request对象被销毁的信号
  6. got_request_exception = _signals.signal('got-request-exception') #视图函数发生异常的信号
  7. appcontext_tearing_down = _signals.signal('appcontext-tearing-down') #app上下文被摧毁的信号
  8. appcontext_pushed = _signals.signal('appcontext-pushed')#app上下文被推入栈上的信号
  9. appcontext_popped = _signals.signal('appcontext-popped')#app上下文被推出栈上的信号
  10. message_flashed = _signals.signal('message-flashed')#flaskflush方法的信号

例如:

  1. flask.template_rendered:模版渲染完毕后发送,示例如下:

    1. from flask import template_rendered
    2. def log_template_renders(sender,template,context,*args):
    3. print( 'sender:',sender)
    4. print ('template:',template)
    5. print ('context:',context)
    6. template_rendered.connect(log_template_renders,app)
  2. flask.request_started:请求开始之前,在到达视图函数之前发送,订阅者可以调用request之类的标准全局代理访问请求。示例如下:

    1. def log_request_started(sender,**extra):
    2. print('sender:',sender)
    3. print('extra:',extra)
    4. request_started.connect(log_request_started,app)
  3. flask.request_finished:请求结束时,在响应发送给客户端之前发送,可以传递response,示例代码如下:

    1. def log_request_finished(sender,response,*args):
    2. print( 'response:',response)
    3. request_finished.connect(log_request_finished,app)
  4. flask.got_request_exception:在请求过程中抛出异常时发送,异常本身会通过exception传递到订阅的函数。示例代码如下:

    1. def log_exception_finished(sender,exception,*args):
    2. print ('sender:',sender)
    3. print (type(exception))
    4. got_request_exception.connect(log_exception_finished,app)
  5. flask.request_tearing_down:请求被销毁的时候发送,即使在请求过程中发生异常,也会发送,示例代码如下:

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

    1. def log_appcontext_tearing_down(sender,**kwargs):
    2. print ('coming...')
    3. 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. php 操作redis 以及几个常用命令

    redis-cli -h host -p port -a password 首次进入redis 进行绑定ip和端口号   del key 删除指定key   exists key 检查指定key是否存 ...

  2. caffe 笔记

    caffe模块: blob:caffe中数据的封装,用于layer上流动 layer:输入层.输出层.神经网络层的抽象 net:神经网络结构,将layer层叠关联起来 solver:定义神经网络训练和 ...

  3. Struts2-result

    所有result-type <result-types> <result-type name="chain" class="com.opensympho ...

  4. Grand Central Dispatch

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许 ...

  5. noip第16课作业

    1. 猴子吃桃 [问题描述] 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个:第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个:以后每天都吃前一天剩下的一半多一个,到第10天想再吃时 ...

  6. Windows下Django环境搭建

    总体示意图如下:  Windows下搭建Django环境 1.安装Python版本 2.安装pip工具,一般Python安装都会自动会有这个,在你python安装命令下Scripts文件夹下 3.dj ...

  7. hdu 3030

    这道题主要就是问你,长度为n的序列,有多少种上升的子序列 当前点的情况种数等于前面所有小于它的点的种数相加 + 1 1就是只有这一个点的时候的序列 那就是要多次查询前面比它小的点的种数的和 那么就是区 ...

  8. python处理excel之读:xlrd模块

    # -*- coding:utf-8 -*- import xlrd path = r'D:/工作簿1(已自动还原).xlsx' # 打开excel文件读取数据 data = xlrd.open_wo ...

  9. whu暑期集训#1

    题号:SGU123----SGU131 Problem A: 题意:求斐波那契的前N项和.. 做法:直接模拟,注意得用long long Problem B: 题意:给定一个封闭的多边形,求一个点在不 ...

  10. Android-Recyclerview-使用分割线

    由于Recyclerview是在 android.support.v7.widget.包 RecyclerView,所以需要导Recycler库: 导Recycler库: 选择项目,右键-->  ...