Web框架——Flask系列之请求上下文与应用上下文请求钩子Flask-Script扩展命令行(十七)
一、请求上下文和应用上下文
请求上下文(request context)
request和session都属于请求上下文对象。应用上下文(application context)
current_app和g都属于应用上下文对象。
current_app:表示当前运行程序文件的程序实例。
g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量。
二、请求钩子
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:
- before_first_request:在处理第一个请求前运行。
@app.before_first_request
before_request:在每次请求前运行。
after_request(response):如果没有未处理的异常抛出,在每次请求后运行。
teardown_request(response):在每次请求后运行,即使有未处理的异常抛出。
from flask import Flask,session
app = Flask(__name__)
@app.route("/index",methods=["GET","POST"])
def index():print("index 被执行")return "index page"
# 四种钩子函数
@app.before_first_request
def handle_before_first_request():'''在第一次请求处理之前先被执行'''print("handle_before_first_request 被执行")
@app.before_request
def handle_before_request():'''在每次请求之前都被执行'''print("handle_before_request 被执行")
@app.after_request
def handle_after_request(response):'''每次请求(视图函数处理)之后都被执行,前提是视图函数中没有出现异常'''print("handle_after_request 被执行")return response
@app.teardown_request
def handle_teardown_request(response):'''无论视图函数中有没有出现异常,每次请求(视图函数处理)之后都被执行'''print("handle_teardown_request 被执行")return response
if __name__ == '__main__':app.run(debug=True)
通过判断请求路径url 来让钩子函数根据视图的不同执行不同的处理函数:
from flask import Flask,request,url_for
app = Flask(__name__)
@app.route("/index",methods=["GET","POST"])
def index():print("index 被执行")# a=1/0return "index page"@app.route("/hello")
def hello():print("hello 被执行")return "hello page"# 四种钩子函数
@app.before_first_request
def handle_before_first_request():'''在第一次请求处理之前先被执行'''print("handle_before_first_request 被执行")
@app.before_request
def handle_before_request():'''在每次请求之前都被执行'''print("handle_before_request 被执行")
@app.after_request
def handle_after_request(response):'''每次请求(视图函数处理)之后都被执行,前提是视图函数中没有出现异常'''print("handle_after_request 被执行")return response@app.teardown_request
def handle_teardown_request(response):'''无论视图函数中有没有出现异常,每次请求(视图函数处理)之后都被执行'''path = request.pathif path == url_for("index"):print("这是在请求钩子中,判断请求的视图逻辑:index")elif path == url_for("hello"):print("这是在请求钩子中,判断请求的视图逻辑:hello")print("handle_teardown_request 被执行")return responseif __name__ == '__main__':app.run(debug=True)
三、Flask-Script扩展命令行
pip install Flask-Script
from flask import Flask
from flask_script import Managerapp = Flask(__name__)manager = Manager(app)@app.route('/')
def index():return '床前明月光'if __name__ == "__main__":manager.run() ...
Terminal 终端中运行:
Web框架——Flask系列之请求上下文与应用上下文请求钩子Flask-Script扩展命令行(十七)相关推荐
- Flask框架(flask中的请求上下文和应用上下文,以及请求钩子的使用,Flask-Script 扩展命令行)
1.请求上下文与应用上下文 请求上下文(request context) request和session都属于请求上下文对象. 应用上下文(application context) current_a ...
- 框架的特性_Go 语言 Web 框架 Echo 系列:基础篇—通过一个例子串联各特性
通过前面的介绍,相信对 echo 有了一个初步的认识.本文我们通过一个简单的登录页面来串联 echo 的相关特性.因为该文主要关注各个特性,所以在目录结构和代码组织方面很随意. 本节最终效果 1)登录 ...
- [转载] 新兵训练营系列课程——平台服务部署及Web框架
原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平 ...
- Django基础一之web框架的本质
我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求, ...
- day 65 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Dja ...
- 200行自定义异步非阻塞Web框架
Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞 ...
- Django之web框架的本质
web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应, ...
- tornado学习笔记day01-高并发性能web框架
tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...
- go 语言的web 框架
Golang被称为云计算时代的C语言,它以其独特的优势逐渐被越来越多的公司所关注和使用.为了充分利用Golang的Web开发优势,有必要熟悉一下Go语言的web框架. 1 Beego (http ...
最新文章
- Step by Step WebMatrix网站开发之二:使用WebMatrix(1)
- Chrome开发者工具详解(2)-Network面板
- GPRS的工作原理、主要特点
- hiho一下 第七周 Hihocoder #1043 : 完全背包
- CentOS6.5下搭建SVN服务器
- 关于python文件问题
- python字典合并几种方式对比,Python合并两个字典的常用方法与效率比较
- IBM副总裁自述的数据中心简化经验
- 红黑树与平衡二叉树_百图详解红黑树,想不理解都难
- python面部颜色分析_Python图像处理之颜色的定义与使用分析
- nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
- TCP四次握手断开连接(图解)
- 非平衡电桥电阻计算_用非平衡电桥如何测量电阻_非平衡电桥测量电阻详解
- Linux程序设计(常用Linux命令)
- Flink整合kafka并基于事件源生成时间戳以及水印
- 诺基亚奢华手机:高配置+8.78万元
- Unity 水体浮力的实现
- Saber 能量激光描边光效插件
- 舒亦梵:几条投资理念,决定你是否具有富人思维
- windows7系统损坏修复_为什么有的win7开机没有修复计算机的选项?分享解决方法!...
热门文章
- android 手动回收对象,Android Studio Studio回收列表中的JSON对象
- 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...
- java 自动装拆箱
- oracle sql语句 exists
- VS toolTip1控件的使用1
- stm32c语言设计以及注释,13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
- Linux进程全解8——exec 族函数
- web前端细解cookie那些事
- Unity3D_(游戏)控制物体的上、下、左、右移动
- HDU 4701 Game