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 相关文章推荐
python批量制作雷达图的实现方法
Jul 26 Python
python Flask实现restful api service
Dec 04 Python
详解基于django实现的webssh简单例子
Jul 17 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
python3中sys.argv的实例用法
Apr 24 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 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
十天学会php(1)
2006/10/09 PHP
PHP读MYSQL中文乱码的解决方法
2006/12/17 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
prototype1.4中文手册
2006/09/22 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
python numpy实现rolling滚动案例
2020/06/08 Python
浅谈Python __init__.py的作用
2020/10/28 Python
销售团队激励口号
2014/06/06 职场文书
出国签证在职证明
2014/09/20 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
行政申诉状范文
2015/05/20 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书