浅谈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的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python日志模块logbook使用方法
Sep 19 Python
WxPython实现无边框界面
Nov 18 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python 批量将中文名转换为拼音
Feb 07 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 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/12/06 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
大学生实习思想汇报
2014/01/12 职场文书
社区党务公开实施方案
2014/03/18 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers