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迭代用法实例教程
Sep 08 Python
Python的subprocess模块总结
Nov 07 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Python3 Random模块代码详解
Dec 04 Python
基于python进行桶排序与基数排序的总结
May 29 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python 常用的异步框架汇总整理
Jun 18 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中的PHP_EOL换行符详细解析
2013/10/26 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
php中动态修改ini配置
2014/10/14 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
python海龟绘图实例教程
2014/07/24 Python
Python heapq使用详解及实例代码
2017/01/25 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python爬取网页转换为PDF文件
2018/06/07 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
django+echart数据动态显示的例子
2019/08/12 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
python导入库的具体方法
2020/06/18 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
国贸专业个人求职信范文
2014/01/08 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
员工工作表扬信
2015/05/05 职场文书
工作简历的自我评价
2019/05/16 职场文书