zoukankan      html  css  js  c++  java
  • 【Flask】abort和errorhandler、app_errorhandler进行请求中断及自定义异常处理

    在view函数中,如果需要中断request,可以使用abort(500)或者直接raise exception。当然我们还需要返回一个出错信息给前端,所以需要定制一下ErrorHandler。一般只需要两个个handler即可,一个是404错误,一个是500一类的服务器端错误。当然也可以自定义错误。

    abort中断请求

    # 在flask中可以通过abort中断触发请求对应的状态码
    from flask import  abort
    
    @app.route('/')
    def index():
        abort(401)    # 请求到此即中断,不会打印下面的语句,并返回HTTP状态码401
       print '123' 

    errorhandler捕捉当前app或蓝图的状态码,并进行自定制处理

    下面是一份示例代码,admin是一个蓝本或者app,发生404错误或500错误,会返回一个Json对象给请求段。

    from flask import jsonify
    from . import admin
    
    @admin.errorhandler(404)
    def error_404(error):
        """这个handler可以catch住所有abort(404)以及找不到对应router的处理请求"""
        response = dict(status=0, message="404 Not Found")
        return jsonify(response), 404
    
    @admin.errorhandler(Exception)
    def error_500(error):
        """这个handler可以catch住所有的abort(500)和raise exeception."""
        response = dict(status=0, message="500 Error")
        return jsonify(response), 400
    
    class MyError(Exception):
        """自定义错误类"""
        pass
    
    @admin.errorhandler(MyError)
    def MyErrorHandle(error):
        response = dict(status=0, message="400 Error")
        return jsonify(response), 400
    

      

    app_errorhandler捕捉全局状态码,并进行自定制异常处理

    在蓝本中编写错误处理程序有点不同,如果使用errorhandler修饰器,那么只有蓝本中的错误才会触发。如果想注册全局的错误处理程序,要用app_errorhandler

    例如:

    from . import auth
    
    
    @auth.app_errorhandler(404)
    def error_404(error):
        response = dict(status=0, message="404 Not Found")
        return jsonify(response), 404
    

     

    补充说明

      当我们不是使用的工厂模式创建app时,app.errorhandler(401),即可捕捉全局401状态;若使用了create_app方式创建app,则无法进行捕捉,若想捕捉,可以在蓝图中写,如admin.errorhandler(401),即捕捉admin蓝图下所有401状态码,admin.app_errorhandler(401),则是捕捉的全局的401状态码,即其他蓝图中的401状态,也会被捕捉,进行处理

  • 相关阅读:
    centos pptp client 配置
    hadoop hdfs 权限修改
    cdh Host Monitor 启动失败
    cdh yarn 启动失败
    hive 存储
    docker修改默认存储位置
    centos新增磁盘
    zookeeper服务部署数量
    实时人群计算——设想
    docker容器多服务——Supervisor
  • 原文地址:https://www.cnblogs.com/huchong/p/9205651.html
Copyright © 2011-2022 走看看