浅谈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使用socket远程连接错误处理方法
Apr 29 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
python3模块smtplib实现发送邮件功能
May 22 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
python turtle库画一个方格和圆实例
Jun 27 Python
python多线程分块读取文件
Aug 29 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
如何用用Python将地址标记在地图上
Feb 07 Python
python如何为list实现find方法
May 30 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 shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
活动总结格式范文
2014/04/26 职场文书
2014年征兵标语
2014/06/20 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python