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列表生成器的循环技巧分享
Mar 06 Python
python fabric使用笔记
May 09 Python
python实现将文本转换成语音的方法
May 28 Python
Python探索之Metaclass初步了解
Oct 28 Python
python实现画一颗树和一片森林
Jun 25 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
Python流程控制常用工具详解
Feb 24 Python
python 实现的车牌识别项目
Jan 25 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
Django路由层如何获取正确的url
Jul 15 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Python如何读取、写入CSV数据
2020/07/28 Python
python 常见的反爬虫策略
2020/09/27 Python
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
财务检查整改报告
2014/11/06 职场文书
中秋联欢会主持词
2015/07/04 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS