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删除列表中重复记录的方法
Apr 28 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python合并两个字典的常用方法与效率比较
Jun 17 Python
Python实现的RSS阅读器实例
Jul 25 Python
python从入门到精通(DAY 1)
Dec 20 Python
快速入手Python字符编码
Aug 03 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
python中的print()输出
Apr 12 Python
Django中多种重定向方法使用详解
Jul 17 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 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实现快速排序的三种方法分享
2014/03/12 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
详解vue-property-decorator使用手册
2019/07/29 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
python发送告警邮件脚本
2018/09/17 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
pandas计数 value_counts()的使用
2019/06/24 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
机械设计专业应届生求职信
2013/11/21 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
民间借贷借条如何写
2015/05/26 职场文书
Java 定时任务技术趋势简介
2022/05/04 Java/Android
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python