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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Django自定义manage命令实例代码
Feb 11 Python
取numpy数组的某几行某几列方法
Apr 03 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python滑块验证码的破解实现
Nov 10 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
python实现不同数据库间数据同步功能
Feb 25 Python
python爬取youtube视频的示例代码
Mar 03 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python 读入多行数据的实例
2018/04/19 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Django如何自定义分页
2018/09/25 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
pycharm运行scrapy过程图解
2019/11/22 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
几道数据库的概念性面试题
2014/05/30 面试题
给排水工程师岗位职责
2013/11/21 职场文书
校本教研工作制度
2014/01/22 职场文书
项目建议书模板
2014/05/12 职场文书
小区推广策划方案
2014/06/06 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android