Flask信号流程
首先先我们来看看Flask里面的信号是什么样的,我们可以找到一个叫signals.py的文件

这里面是所有定义了的后面请求流程中会用到的信号
二、哪些地方用到了信号

1、请求app上下文时执行的,在执行ctx.push()时,执行了RequestContext类里的push方法

- 接着app_ctx.push(),执行的是AppContext类里的push,这里用到了appcontext_pushed.send(self.app)这一信号:

2、full_dispatch_request()里用到了request_started.send(self)这一信号,在请求到来时执行:

3、我们在进行模板渲染时,render_template里面返回的_render()里面使用了before_render_template和template_rendered两个信号:
4、接着,在finalize_request(rv)里使用了request_finished.send(self, response=response)这一信号,在请求结束后执行:

5、在handle_exception(e)里用到了got_request_exception.send(self, exception=e)这一信号,在请求出现异常时执行:
6、在最后的ctx.auto_pop(error)里执行RequestContext的pop方法,

这里面又调用了self.app.do_teardown_request(exc),在这里使用了request_tearing_down.send(self, exc=exc)这一信号,请求执行完毕后自动执行(无论成功与否):

7、同样在RequestContext的pop方法里,这里执行了app_ctx.pop(exc),调用了AppContext里的pop方法:

这里使用了appcontext_popped.send(self.app)这一信号,在请求上下文执行完毕后自动执行的(无论成功与否):

Flask信号流程的更多相关文章
- Flask - 请求处理流程和上下文源码分析
目录 Flask - 请求处理流程和上下文 WSGI Flask的上下文对象及源码解析 0. 请求入口 1.请求上下文对象的创建 2. 将请求上下文和应用上下文入栈 3.根据请求的URl执行响应的视图 ...
- flask信号使用
flask信号: 安装: flask中的信号使用的是一个第三方插件,叫做blinker.通过pip list看一下,如果没有安装,通过以下命令即可安装blinker: pip install blin ...
- 信号(Django信号、Flask信号、Scrapy信号)
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- Flask信号源码流程
1. appcontext_pushed = _signals.signal('appcontext-pushed'# 请求app上下文push时执行 return RequestContext(se ...
- Flask —— 信号(5)
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...
- 了解Flask 信号机制
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...
- flask信号
骚师博客:信号 信号你就可以这么理解,请求比喻成赛车,请求走的流程就是赛车道,而信号坐落在赛车道上的加油站和维修站,信号注册的函数好比维修站的人,每经过维修站并且维修站里有人就进行维修 信号这里理解: ...
- flask请求流程详解
先看一个流程图: 1.当一个请求进入的时候,Flask框架首先会实例化一个Request Context,封装了请求信息,保存在Request中.生成请求上下文后,Flask框架会将请求上下文推入到_ ...
- Flask请求流程超清大图
补充一下 request是在哪里产生的: class RequestContext(object): # app就是flask对象 self.app = app if request is None: ...
随机推荐
- 使用weui
1 在https://github.com/weui/weui-wxss/下载项目,得到weui.wxss文件 2 把文件放在小程序项目的根目录下 3 在app.wxss中引用weui.wxss文件 ...
- docker --help 详解
[root@c1 _src]# dockerd --help Usage: dockerd [OPTIONS] A self-sufficient runtime for containers. Op ...
- py-day17-jquery
jquery实现案例 案例: 1.点赞 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- Sandy and Nuts
题意: 现在有一个$n$个点的树形图被拆开,现在你知道其中$m$条边,已经$q$对点的$LCA$,试求原先的树有多少种可能. 解法: 考虑$dp$,$f(x,S)$表示$x$的子树内的点集为$S$(不 ...
- classpath路径指什么
一.classpath路径指什么 只知道把配置文件如:mybatis.xml.spring-web.xml.applicationContext.xml等放到src目录(就是存放代码.java文件的目 ...
- TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...
- 甩掉 ashx/asmx,使用jQuery.ajaxWebService请求WebMethod,Ajax处理更加简练
在WebForm下 开发ajax程序,需要借助于一般处理程序(*.ashx)或web服务(*.asmx),并且每一个ajax请求,都要建一个这样的文件,如此一来,如果在一个项目中ajax程序多了,势必 ...
- 2013 Noip提高组 Day1
3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description ...
- APP为什么会被打回来??
APP的设置界面, 按钮使用了类似iPhone的操作方式以及icon的圆角设计 -> 重新设计 APP的年龄设置太低 -> 改年龄 APP里有实物奖励 -> 免责声明, ...
- EasyUI datagrid 列宽度拖动问题
问题:拖不动或者偶尔能拖动,拖动不按指定? 原因:列宽度绑定的时候使用的百分比; 方法:获取总宽度,经过百分比计算在绑定