zoukankan      html  css  js  c++  java
  • http视图请求钩子

    在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:

    • 在请求开始时,建立数据库连接;

    • 在请求开始时,根据需求进行权限校验;

    • 在请求结束时,指定数据的交互格式;

    为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设置的功能,即请求钩子。

    请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

    • before_first_request

      • 在处理第一个请求前执行[项目初始化时的钩子]

    • before_request

      • 在每次请求前执行

      • 如果在某修饰的函数中返回了一个响应,视图函数将不再被调用

    • after_request

      • 如果没有抛出错误,在每次请求后执行

      • 接受一个参数:视图函数作出的响应

      • 在此函数中可以对响应值在返回之前做最后一步修改处理

      • 需要将参数中的响应在此参数中进行返回

    • teardown_request:

      • 在每次请求后执行

      • 接受一个参数:错误信息,如果有相关错误抛出

      • 需要设置flask的配置DEBUG=False,teardown_request才会接受到异常对象。

    from flask import Flask,make_response
    
    app = Flask(__name__)
    
    @app.before_first_request
    def first_request():
        print("1. 项目启动以后,首次被请求时,会自动执行[项目全局初始化工作]")
    
    @app.before_request
    def before_request():
        print("2. 每次客户端请求时,都会自动执行, 常用于记录访问日志,进行权限判断,身份识别,访问限流...")
    
    @app.after_request
    def after_request(response):    #来自视图的返回值response
        print("4. 每次视图执行以后,会自动执行")
        # after_request执行以后,必须要返回结果给客户端!!
        return response
    
    @app.teardown_request
    def teardown_request(exc):
        print("5. after_request完成以后,如果有发生异常,在关闭DEBUG模式的情况下可以接受异常对象,进行异常的记录,异常通知")
        print(exc)
    
    @app.route("/")
    def set_session():
        print("3. 视图执行了.......")
        1/0    #为了测试teardown_request,报错
        return "ok"
    
    
    if __name__ == '__main__':
        app.run(debug=False)
  • 相关阅读:
    CCF CSP 题解
    CCF CSP 2019032 二十四点
    CCF CSP 2018121 小明上学
    CCF CSP 2019092 小明种苹果(续)
    CCF CSP 2019091 小明种苹果
    CCF CSP 2019121 报数
    CCF CSP 2019031 小中大
    CCF CSP 2020061 线性分类器
    CCF CSP 2020062 稀疏向量
    利用国家气象局的webservice查询天气预报(转载)
  • 原文地址:https://www.cnblogs.com/zhangjiahao996/p/14008283.html
Copyright © 2011-2022 走看看