浅谈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类的用法实例浅析
May 27 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
python+mysql实现学生信息查询系统
Feb 21 Python
python绘制直方图和密度图的实例
Jul 08 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
Python中函数的返回值示例浅析
Aug 28 Python
超实用的 30 段 Python 案例
Oct 10 Python
Python bytes string相互转换过程解析
Mar 05 Python
Python: glob匹配文件的操作
Dec 11 Python
python爬取youtube视频的示例代码
Mar 03 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 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/23 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python基础教程之常用运算符
2014/08/29 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
幼儿园教师备课制度
2014/01/12 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
村党支部换届选举方案
2014/05/02 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
企业挂职心得体会
2014/09/10 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
总结Python常用的魔法方法
2021/05/25 Python