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 10 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
如何使用python操作vmware
Jul 27 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
利用Python优雅的登录校园网
Oct 21 Python
pandas抽取行列数据的几种方法
Dec 13 Python
pycharm 关闭search everywhere的解决操作
Jan 15 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
微信小程序canvas分享海报功能
2019/10/31 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
广州地球村科技数据库题目
2016/04/25 面试题
客户经理岗位职责
2013/12/08 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
法人身份证明书
2015/06/18 职场文书
休假证明书
2015/06/24 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
如何撰写创业策划书
2019/06/27 职场文书
世界文化遗产导游词
2019/08/07 职场文书