浅谈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常见排序算法基础教程
Apr 13 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python3 中文文件读写方法
Jan 23 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
python实现函数极小值
Jul 10 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Django分组聚合查询实例分享
Apr 29 Python
python dict乱码如何解决
Jun 07 Python
python通配符之glob模块的使用详解
Apr 24 Python
如何在Python项目中引入日志
May 31 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
功能强大的php文件上传类
2016/08/29 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
跟老齐学Python之编写类之二方法
2014/10/11 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
python监控键盘输入实例代码
2018/02/09 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python环境下安装opencv库的方法
2020/03/05 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
德国家具在线:Fashion For Home
2017/03/11 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
经典c++面试题六
2012/01/18 面试题
MySQL中一条update语句是如何执行的
2022/03/16 MySQL