一、请求上下文和应用上下文

  1. 请求上下文(request context)
    request和session都属于请求上下文对象。

  2. 应用上下文(application context)
    current_app和g都属于应用上下文对象。
    current_app:表示当前运行程序文件的程序实例。
    g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量

二、请求钩子

请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

  1. before_first_request:在处理第一个请求前运行。
@app.before_first_request
  1. before_request:在每次请求前运行。

  2. after_request(response):如果没有未处理的异常抛出,在每次请求后运行。

  3. 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扩展命令行(十七)相关推荐

  1. Flask框架(flask中的请求上下文和应用上下文,以及请求钩子的使用,Flask-Script 扩展命令行)

    1.请求上下文与应用上下文 请求上下文(request context) request和session都属于请求上下文对象. 应用上下文(application context) current_a ...

  2. 框架的特性_Go 语言 Web 框架 Echo 系列:基础篇—通过一个例子串联各特性

    通过前面的介绍,相信对 echo 有了一个初步的认识.本文我们通过一个简单的登录页面来串联 echo 的相关特性.因为该文主要关注各个特性,所以在目录结构和代码组织方面很随意. 本节最终效果 1)登录 ...

  3. [转载] 新兵训练营系列课程——平台服务部署及Web框架

    原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平 ...

  4. Django基础一之web框架的本质

    我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求, ...

  5. day 65 Django基础一之web框架的本质

    Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Dja ...

  6. 200行自定义异步非阻塞Web框架

    Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞 ...

  7. Django之web框架的本质

    web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应, ...

  8. tornado学习笔记day01-高并发性能web框架

    tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...

  9. go 语言的web 框架

      Golang被称为云计算时代的C语言,它以其独特的优势逐渐被越来越多的公司所关注和使用.为了充分利用Golang的Web开发优势,有必要熟悉一下Go语言的web框架. 1  Beego (http ...

最新文章

  1. Step by Step WebMatrix网站开发之二:使用WebMatrix(1)
  2. Chrome开发者工具详解(2)-Network面板
  3. GPRS的工作原理、主要特点
  4. hiho一下 第七周 Hihocoder #1043 : 完全背包
  5. CentOS6.5下搭建SVN服务器
  6. 关于python文件问题
  7. python字典合并几种方式对比,Python合并两个字典的常用方法与效率比较
  8. IBM副总裁自述的数据中心简化经验
  9. 红黑树与平衡二叉树_百图详解红黑树,想不理解都难
  10. python面部颜色分析_Python图像处理之颜色的定义与使用分析
  11. nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
  12. TCP四次握手断开连接(图解)
  13. 非平衡电桥电阻计算_用非平衡电桥如何测量电阻_非平衡电桥测量电阻详解
  14. Linux程序设计(常用Linux命令)
  15. Flink整合kafka并基于事件源生成时间戳以及水印
  16. 诺基亚奢华手机:高配置+8.78万元
  17. Unity 水体浮力的实现
  18. Saber 能量激光描边光效插件
  19. 舒亦梵:几条投资理念,决定你是否具有富人思维
  20. windows7系统损坏修复_为什么有的win7开机没有修复计算机的选项?分享解决方法!...

热门文章

  1. android 手动回收对象,Android Studio Studio回收列表中的JSON对象
  2. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...
  3. java 自动装拆箱
  4. oracle sql语句 exists
  5. VS toolTip1控件的使用1
  6. stm32c语言设计以及注释,13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
  7. Linux进程全解8——exec 族函数
  8. web前端细解cookie那些事
  9. Unity3D_(游戏)控制物体的上、下、左、右移动
  10. HDU 4701 Game