浅谈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判断直线和矩形是否相交的方法
Jul 14 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Python简单的制作图片验证码实例
May 31 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python while循环使用else语句代码实例
Feb 07 Python
django实现日志按日期分割
May 21 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 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的知识
2006/11/17 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JS重要知识点小结
2011/11/06 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
Vue.js实现价格计算器功能
2020/03/30 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
python实现图片文件批量重命名
2020/03/23 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
django框架auth模块用法实例详解
2019/12/10 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
环境建设实施方案
2014/03/14 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
优秀员工自荐书
2015/03/06 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript