浅谈flask中的before_request与after_request


Posted in Python onJanuary 20, 2018

本文主要是对flask中的before_request与after_request用法做一个简单的分析,具体实例和介绍如下。

使用before_request 和 after_request的方法都非常简单,使用 @app.before_request 或者@app.after_request 修饰期望在请求前或请求后执行的函数即可

示例:

@app.before_request 
def before_request(): 
  if not m_ip_range.is_ip_strict(): 
    return 
  ranges = m_ip_range.get_range() 
  ip_int = utils.ip_to_int(request.remote_addr) 
  yes = False 
  for item in ranges: 
    if item['is_used']==0: 
      continue 
    if ip_int >= item['ip_start'] and ip_int <= item['ip_end']: 
      yes = True 
      break 
  if not yes: 
    abort(400)

before_request()函数被修饰以后,每一次请求到来后,都会先执行它,如果没问题即没有执行到abort(400),那么就会进入到正常的被app.route修饰的函数中进行响应,如果有多个函数被app.before_request修饰了,那么这些函数会被依次执行。

你很关心这个before_request装饰器有什么用,其实它的用处非常大,比如我们希望能对ip地址进行过滤,虽然你可以使用nginx,但我们也可以使用before_request来做,使用nginx,我们不得不手动的进行设置,但如果是用flask自身的before_request机制,我们可以在程序判断出某个ip有恶意访问行为后将其加入到缓存当中(redis),每次请求到来时,由before_request来判断这个ip是不是合法的。

被app.after_request修饰过的函数会在请求得到相应后返回给用户前被调用,也就是说,这个时候,请求已经被app.route装饰的函数响应过了,已经形成了response,我们在这个时候做一些操作,flask有一个插件叫 flask-compress,是对响应结果进行压缩的,它就是用after_request的这个机制,在response返回前对数据进行了压缩,如果你有别的想要操作的事情,同样可以使用after_request来完成。

总结

以上就是本文关于浅谈flask中的before_request与after_request的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Sanic框架配置操作分析
Jul 17 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
python对象转字典的两种实现方式示例
Nov 07 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
python如何实现word批量转HTML
Sep 30 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
python通配符之glob模块的使用详解
Apr 24 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 #Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 #Python
Python实现PS滤镜中马赛克效果示例
Jan 20 #Python
浅析python协程相关概念
Jan 20 #Python
Python实现可自定义大小的截屏功能
Jan 20 #Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 #Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 #Python
You might like
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
Python 功能和特点(新手必学)
2015/12/30 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python对象属性自动更新操作示例
2018/06/15 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python实现LRU热点缓存及原理
2019/10/29 Python
使用Pycharm分段执行代码
2020/04/15 Python
计算机专业毕业生自荐信
2013/12/31 职场文书
公司文体活动总结
2015/05/07 职场文书