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常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
浅析Python函数式编程
Oct 06 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
如何写python的配置文件
Jun 07 Python
一文读懂Python 枚举
Aug 25 Python
python操作链表的示例代码
Sep 27 Python
如何用python清洗文件中的数据
Jun 18 Python
Python+tkinter实现高清图片保存
Mar 13 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数据库类
2009/05/27 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
PHP echo()函数讲解
2019/02/15 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Python IDLE清空窗口的实例
2018/06/25 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
什么是类的返射机制
2016/02/06 面试题
责任担保书范文
2014/05/21 职场文书
监督检查工作方案
2014/05/28 职场文书
学校联谊协议书
2014/09/16 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
公司市场部岗位职责
2015/04/15 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python