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生成器generator之next和send的运行流程(详解)
May 08 Python
Python实现随机选择元素功能
Sep 14 Python
python清理子进程机制剖析
Nov 23 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
利用Python如何生成便签图片详解
Jul 09 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
下载官网python并安装的步骤详解
Oct 12 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
简单介绍Python的第三方库yaml
Jun 18 Python
python获取对象信息的实例详解
Jul 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
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
PHP使用者状态管理功能的应用
2006/10/09 PHP
Php注入点构造代码
2008/06/14 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
2014年五一促销活动方案
2014/03/09 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
软件项目实施计划书
2014/05/02 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
2014年采购工作总结
2014/11/20 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
色戒观后感
2015/06/12 职场文书
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python