• flask 抛出异常捕获异常 和 请求钩子


    flask 抛出异常

    abort 方法

    抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常但你想终止请求,你可以调用 abort(404)。

    @app.route("/demo1")
    def demo1():
        abort(404)      # 抛出404错误
        return "抛出404"

    捕获异常

    errorhandler 装饰器

    当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法

    参数:code_or_exception – HTTP的错误状态码

    # 捕获相关状态码,然后进行处理
    @app.errorhandler(404)
    def internal_server_error(e):
        return '服务器搬家了'
    
    
    
    # 捕获指定异常,然后进行处理
    @app.errorhandler(ZeroDivisionError)
    def zero_division_error(e):
        return '除数不能为0'

    请求钩子

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

    • 在请求开始时,建立数据库连接;
    • 在请求开始时,根据需求进行权限校验;
    • 在请求结束时,指定数据的交互格式;

    1.before_first_request:在第一次请求之前运行,只需执行一次,如链接数据库

    2.before_request:在每一次请求都会执行,可以在这里做权限校验操作,比如说某用户是黑名单用户,黑名单用户登录系统将遭到拒绝访问,可以使用before_request进行权限校验。

    3.after_request:在请求之后运行,会接收一个参数,这个参数就是前面的请求处理完毕之后, 返回的响应数据,如果需要对响应做额外处理,可以再这里进行。

    4.teardown_request:每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息

    from flask import Flask
    ​
    app = Flask(__name__)
    ​
    @app.route('/')
    def helloworld():
        return 'hello world'# 在第一次请求之前运行.
    # 例子: 比如连接数据库操作, 只需要执行一次
    @app.before_first_request
    def before_first_request():
        print('before_first_request')
    ​
    # 在每一次请求都会执行
    # 例子: 可以在这里做权限校验操作,比如说某用户是黑名单用户,黑名单用户登录系统将遭到拒绝访问,可以使用
    # before_request进行权限校验
    @app.before_request
    def before_request():
        print('before_request')
    ​
    # 在请求之后运行
    @app.after_request
    def after_request(response):
        # response: 就是前面的请求处理完毕之后, 返回的响应数据
        # 如果需要对响应做额外处理,可以再这里进行
        # json.dumps 配置请求钩子
        # response.headers["Content-Type"] = "application/json"
        print('after_request')
        return response
    ​
    # 每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
    @app.teardown_request
    def teardown_request(error):
        # 数据库的扩展, 可以实现自动提交数据库
        print('teardown_request: error %s' % error)
    ​
    ​
    if __name__ == '__main__':
        app.run(debug=True
  • 相关阅读:
    微信小程序之跨界面传参
    微信小程序简易教程
    css动画与js动画的区别
    不同浏览器兼容性的区别
    Filter学习
    FileDescriptor
    Executor框架
    Struts1的处理流程
    Struts1的实现原理
    [转]TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath
  • 原文地址:https://www.cnblogs.com/love2000/p/13646999.html
Copyright © 2020-2023  润新知