浅谈flask中的before_request与after_request

 更新时间:2018年01月20日 11:37:43   作者:kwsy2008  
这篇文章主要介绍了浅谈flask中的before_request与after_request,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文主要是对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 Graham求凸包问题并画图操作

    python Graham求凸包问题并画图操作

    这篇文章主要介绍了python Graham求凸包问题并画图操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python最好的日期处理库pendulum的使用指南

    Python最好的日期处理库pendulum的使用指南

    关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。本文将为大家介绍一个小编最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足
    2022-07-07
  • Python datetime 如何处理时区信息

    Python datetime 如何处理时区信息

    这篇文章主要介绍了Python datetime 如何处理时区信息,帮助大家更好的用python 处理时间,感兴趣的朋友可以了解下。
    2020-09-09
  • Python中的asyncio代码详解

    Python中的asyncio代码详解

    asyncio 是用来编写 并发 代码的库,使用 async/await 语法。 asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。这篇文章主要介绍了Python中的asyncio,需要的朋友可以参考下
    2019-06-06
  • Pycharm激活方法及详细教程(详细且实用)

    Pycharm激活方法及详细教程(详细且实用)

    这篇文章主要介绍了Pycharm激活方法及详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-05-05
  • Python常用模块用法分析

    Python常用模块用法分析

    这篇文章主要介绍了Python常用模块用法分析,主要包括内置函数、文件操作、正则匹配等等,需要的朋友可以参考下
    2014-09-09
  • 安装python时MySQLdb报错的问题描述及解决方法

    安装python时MySQLdb报错的问题描述及解决方法

    这篇文章主要介绍了安装python时MySQLdb报错的问题描述及解决方法,需要的朋友可以参考下
    2018-03-03
  • pandas去重复行并分类汇总的实现方法

    pandas去重复行并分类汇总的实现方法

    这篇文章主要介绍了pandas去重复行并分类汇总的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 利用Python将图片批量转化成素描图的过程记录

    利用Python将图片批量转化成素描图的过程记录

    万能的Python真的是除了不会生孩子,其他的还真不在话下,下面这篇文章主要给大家介绍了关于如何利用Python将图片批量转化成素描图的相关资料,需要的朋友可以参考下
    2021-08-08
  • Python导入torch包的完整方法过程

    Python导入torch包的完整方法过程

    这篇文章主要给大家介绍了关于Python导入torch包的完整方法, python torch又称PyTorach,是一个以Python优先的深度学习框架,一个开源的Python机器学习库,用于自然语言处理等应用程序,需要的朋友可以参考下
    2023-12-12

最新评论