给Flask错误处理程序访问请求

时间:2016-03-11 19:32:57

标签: python error-handling flask

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

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

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

如果在调用get_item期间发生错误,我想显示某个错误页面("抱歉,发生错误......")但是,如果在此期间发生错误打电话给submit_item,我希望它能说一些更具信息性的内容,例如:

  

"发生了错误!请联系我们。

     

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

     

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

是否可以允许错误处理程序访问它,或者我是否只需将整个submit_item包含在try / except语句中?

2 个答案:

答案 0 :(得分:1)

我可能会创建一个自定义异常并为其指定一个类似于this example的错误处理程序。

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)

答案 1 :(得分:1)

您可以在错误处理函数中使用request上下文, 这些方面的东西:

from flask import request

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