Flask框架请求钩子与request请求对象用法实例分析


Posted in Python onNovember 07, 2019

本文实例讲述了Flask框架请求钩子与request请求对象。分享给大家供大家参考,具体如下:

请求钩子

在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:

  • 在请求开始时,建立数据库连接
  • 在请求开始时,根据需求进行权限校验
  • 在请求结束时,指定数据的交互格式

为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。

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

请求钩子 描述
before_first_request 在处理第一个请求前执行
before_request 在处理每一个请求前执行
after_request 如果没有抛出错误,则在每一次请求后执行(接受一个参数:视图函数做出的响应)
teardown_request 在每次请求后执行(接受一个参数:用来接受错误信息)

例:

from flask import Flask
app = Flask(__name__)
# 在第一次请求之前调用,可以在此方法内部做一些初始化操作
@app.before_first_request
def before_first_request():
  print("before_first_request")
# 在每次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验
# 如果请求的校验不成功,可以直接在此方法中进行响应,直接return之后那么就不会执行视图函数
@app.before_request
def before_request():
  print("before_request")
  # if 请求不符合条件:
  #   return "laowang"
# 在执行完视图函数之后会调用,并且会把视图函数所生成的响应传入,可以在此方法中对响应做最后一步统一的处理
@app.after_request
def after_request(response):
  print("after_request")
  response.headers["Content-Type"] = "application/json"
  return response
# 请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
@app.teardown_request
def teardown_request(e):
  print("teardown_request")
@app.route('/')
def index():
  return 'index'
if __name__ == '__main__':
  app.run(debug=True)

第一次访问打印结果:

Flask框架请求钩子与request请求对象用法实例分析

第二次访问打印结果:

Flask框架请求钩子与request请求对象用法实例分析

request对象

属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST…
url 记录请求的URL地址 string
files 记录请求上传的文件 *

获取request对象:

例:

request.url # 请求的url地址
request.args.get("password")) # 获取不到,返回none,
request.args.get("password","aaa")) # 获取不到,返回aaa

希望本文所述对大家基于Flask框架的Python程序设计有所帮助。

Python 相关文章推荐
Python3基础之函数用法
Aug 13 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
Python实现生成密码字典的方法示例
Sep 02 Python
tensorflow的计算图总结
Jan 12 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
Python super()方法原理详解
Mar 31 Python
python中sys模块是做什么用的
Aug 16 Python
python 实现学生信息管理系统的示例
Nov 28 Python
python装饰器代码深入讲解
Mar 01 Python
Python time库的时间时钟处理
May 02 Python
Django框架ORM数据库操作实例详解
Nov 07 #Python
Python程序暂停的正常处理方法
Nov 07 #Python
浅析python redis的连接及相关操作
Nov 07 #Python
大家都说好用的Python命令行库click的使用
Nov 07 #Python
flask 实现token机制的示例代码
Nov 07 #Python
python3反转字符串的3种方法(小结)
Nov 07 #Python
Python中__repr__和__str__区别详解
Nov 07 #Python
You might like
Terran兵种介绍
2020/03/14 星际争霸
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php简单静态页生成过程
2008/03/27 PHP
PHP高级OOP技术演示
2009/08/27 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
jQuery统计上传文件大小的方法
2015/01/24 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
python里大整数相乘相关技巧指南
2014/09/12 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
python解决字符串倒序输出的问题
2018/06/25 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
2014信息公开实施方案
2014/02/22 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
企业法人代表任命书
2014/06/06 职场文书
春游踏青活动方案
2014/08/14 职场文书
家长对孩子的寄语
2015/02/26 职场文书
学校党支部承诺书
2015/04/30 职场文书
国博复兴之路观后感
2015/06/02 职场文书
小学生暑假安全公约
2015/07/14 职场文书
小学毕业感言100字
2015/07/30 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
python如何查找列表中元素的位置
2022/05/30 Python