浅谈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 25 Python
Python获取单个程序CPU使用情况趋势图
Mar 10 Python
Python实现的批量下载RFC文档
Mar 10 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Python+Redis实现布隆过滤器
Dec 08 Python
django序列化时使用外键的真实值操作
Jul 15 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版国家代码、缩写查询函数代码
2011/08/14 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
通过Pandas读取大文件的实例
2018/06/07 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
java判断三位数的实例讲解
2019/06/10 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
python装饰器使用实例详解
2019/12/14 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
银行实习生的自我评价
2013/12/09 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
社区科普工作方案
2014/06/03 职场文书
python读取mat文件生成h5文件的实现
2022/07/15 Python