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在多玩图片上下载妹子图的实现代码
Aug 13 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
详解python破解zip文件密码的方法
Jan 13 Python
Python 实现微信自动回复的方法
Sep 11 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 Python
python处理json数据文件
Apr 11 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
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
在模板页面的js使用办法
2010/04/01 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
javascript中的面向对象
2017/03/30 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
python中sleep函数用法实例分析
2015/04/29 Python
Python Requests安装与简单运用
2016/04/07 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
2014的自我评价
2014/01/13 职场文书
小学教研工作制度
2014/01/15 职场文书
主题婚礼策划方案
2014/02/10 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
小学信息技术教学反思
2016/02/16 职场文书
apache ftpserver搭建ftp服务器
2022/05/20 Servers
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript