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实现方法
Nov 18 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
Python 通过URL打开图片实例详解
Jun 01 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python dlib人脸识别代码实例
Apr 04 Python
Python实现使用request模块下载图片demo示例
May 24 Python
pywinauto自动化操作记事本
Aug 26 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
Python日志器使用方法及原理解析
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如何透过ODBC来存取数据库
2006/10/09 PHP
MySQL数据源表结构图示
2008/06/05 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
php实现微信模板消息推送
2018/03/30 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
浅析Python面向对象编程
2020/07/10 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
打印机墨盒:123Inkjets
2017/02/16 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
体育运动口号
2014/06/09 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
德劲DE1108畅想
2021/04/22 无线电