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中open函数的使用
Mar 01 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python单例模式的两种实现方法
Aug 14 Python
Python中利用xpath解析HTML的方法
May 14 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
在python中做正态性检验示例
Dec 09 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
python实现图片横向和纵向拼接
Mar 05 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
python 5个实用的技巧
Sep 27 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 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
php实现简易计算器
2020/08/28 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
js实现tab切换效果
2017/02/16 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
大学生自我鉴定范文
2013/12/28 职场文书
三年级数学教学反思
2014/01/31 职场文书
职业女性的职业规划
2014/03/04 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书