授予 Flask 错误处理程序访问请求的权限

eri*_*ora 6 python error-handling flask

我正在尝试在 Flask 中创建一个自定义错误页面,并且我想让错误处理程序访问生成导致错误的 API 调用的请求,以便它返回的错误页面可以根据情况进行更改。例如,假设有两个端点:

(1)@app.route('/get_item')

(2)@app.route('/submit_item')

如果在调用 期间发生错误get_item,我想显示某个错误页面(“抱歉,发生错误...”)但是,如果在调用 期间发生错误submit_item,我希望它显示更多信息,例如:

“发生错误!请联系我们。

您的用户名:request.json['userid']

您的提交ID:request.json['submission']

是否可以允许错误处理程序访问此内容,或者我只需包装整个submit_itemin try/except语句?

mgu*_*arr 7

您可以request在错误处理函数中使用上下文,大致如下:

from flask import request

def exception_handler(*args):
    if request.url.endswith('submit_item'):
       return "MyMoreDescriptiveErrorMessage", 500
    else:
       return "Something wrong happened", 500
Run Code Online (Sandbox Code Playgroud)


Sue*_*ver 1

我可能会创建一个自定义异常并为其指定一个错误处理程序,类似于此示例

class CustomException(Exception):

    def __init__(self, message=None, status_code=None, payload=None):
        Exception.__init__(self)

        if message is None:
            message = "Sorry, an error occurred..."

        self.message = message

        if status_code is not None:
            self.status_code = status_code
        self.payload = payload


@app.errorhandler(CustomException)
def handle_custom(error):
    response = render_template('error.html', message=error.message)
    response.status_code = error.status_code
    return response

@app.route('/submit_item')
def submit_item():
     message = "An error occured! Userid: %(userid)d, submission: %(submission_id)d"
     message = message % (request.json)

     raise CustomException(message)
Run Code Online (Sandbox Code Playgroud)