python-flask 技能点使用-01 请求钩子

  • 场景分析

         熟悉java开发的小伙伴应该了解Spring全生命周期以及配套的一系列方法,熟悉Vue开发的小伙伴们应该也熟悉Vue生命周期管理以及一系列方法,使用过Servlet的小伙伴也应该了解其生命周期的概念,本人之前一直从事java开发,现在因为业务需要需要学习python开发,目前如下几个问题

    • web请求用户登录验证拦截
    • 审计日志功能

    之前使用java开发我们可以使用拦截器或者过滤器来实现,审计日志我们可以使用AOP面向切面的方式来实现,最简单的可以定义一个注解,通过面向注解的AOP切面实现,目前业务也是基于Web开发的,不过后端开发语言换成了python,之前只有零星学习python的经验,在git上寻找了许久开源的代码都没有合适的,最终个人对比了下决定使用轻量级的Flask框架,所以面临如何解决以上问题

  • 请求钩子

  在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如在请求开始时建立数据库连接,在请求开始时根据需求进行权限校验,在请求结束时指定数据的交互格式等;为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子;请求钩子是通过装饰器的形式现,Fask支持如下四种请求钩子:

    •   请求钩子类型
      • before_first_request:
        •   在处理第一个请求前执行
        •   其只会执行一次
        • @app.before_first_request
          def before_first_request():
              print('before_first_request')
      • before_request:
        •   在每次请求前执行
        •   如果某修饰的函数中返回了一个响应,视图函数将不再被调用
        •   返回None则继续往后执行
        • @app.before_request
          def before_request():
              url = request.url
              print('before_request url : ', url)
      • after_request:
        •   如果没有抛出错误在每次请求后执行
        •   接受一个参数(视图函数做出的响应)
        •   在此函数中可以对响应值在返回之前做最后一步的修改处理
        •   需要将参数中的影响在此参数中返回
        • @app.after_request
          def after_request(response):
              print('after_request')
      •  teardown_request: 
        •   在每次请求后执行
        •   接受一个参数“错误信息”,如果有相关错误抛出
        •   需要注意在调试模式,即debug=True时不生效
        • @app.teardown_request
          def teardown_request(exception):
              print('teardown_request:{}'.format(str(exception)))
    • 请求钩子类型执行顺序

       before_first_request -- before_request1 -- before_request2 -- view() -- after_request1 -- after_request2

 

 

posted @ 2023-05-15 10:13  521pingguo1314  阅读(13)  评论(0编辑  收藏  举报