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遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Python 26进制计算实现方法
May 28 Python
python3解析库pyquery的深入讲解
Jun 26 Python
opencv python 傅里叶变换的使用
Jul 21 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
为什么Python中没有"a++"这种写法
Nov 27 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
python 协程 gevent原理与用法分析
Nov 22 Python
pandas apply多线程实现代码
Aug 17 Python
Python词云的正确实现方法实例
May 08 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重定向的3种方式
2013/03/07 PHP
php操作xml
2013/10/27 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
很可爱的输入框
2008/08/03 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
jQuery自动或手动图片切换效果
2017/10/11 jQuery
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python的range和linspace使用详解
2019/11/27 Python
解决python replace函数替换无效问题
2020/01/18 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
django教程如何自学
2020/07/31 Python
python的launcher用法知识点总结
2020/08/07 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
计算机个人求职信范例
2014/01/24 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
运动会加油稿
2015/07/22 职场文书
2016公司中秋节寄语
2015/12/07 职场文书