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_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_request:
-
-
- 请求钩子类型执行顺序
before_first_request -- before_request1 -- before_request2 -- view() -- after_request1 -- after_request2