我试图在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
语句中?
答案 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