flask 统一异常处理以及400 500页面

在flask中如何统一处理异常以及400 500页面

异常类
# -*- coding: utf-8 -*-
# Author  : Yang Hao
# File    : exception_common.py
# Software: PyCharm
# Time    : 2020/3/30 17:35
# Description:
from flask import jsonify, render_template
from app import app

class ExceptionCommon(Exception):
    # 默认的返回码
    status_code = 400
    # 可以自己定义return_code
    def __init__(self, message=None, status_code=None, payload=None):
        Exception.__init__(self)
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload

    # 构造要返回的错误代码和错误信息的 dict
    def to_dict(self):
        rv = dict(self.payload or ())
        rv['status_code'] = self.status_code
        rv['message'] = self.message
        return rv

@app.errorhandler(ExceptionCommon)
def handle_invalid_usage(error):
    response = jsonify(error.to_dict())
    response.status_code = error.status_code
    return response

@app.errorhandler(500)
def handle_500(e):
    return render_template('500.html'), 404

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404
如何使用

@auth.route('/logout', methods=('GET', 'POST'))
@login_required
def logout():
    """
    注销登录,解除会话 logout_user()
    :return:
    """
    xxx
    raise ExceptionCommon("错误原因")
    return redirect(url_for("auth.login"))
在整个web项目中使用

上述@app.errorhandler 这个errorhandler处理器注册在app上,只能对app使用

@app.errorhandler(ExceptionCommon)
def handle_invalid_usage(error):
    response = jsonify(error.to_dict())
    response.status_code = error.status_code
    return response

修改为以下内容@comm.app_errorhandler需要注册comm的蓝本

@comm.app_errorhandler(ExceptionCommon)
def handle_invalid_usage(error):
    response = jsonify(error.to_dict())
    response.status_code = error.status_code
    return response
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值