📅  最后修改于: 2023-12-03 15:40:48.781000             🧑  作者: Mango
在 Flask 中,当烧瓶无法找到某个请求的资源时,会返回一个默认的 404 页面。但是有时候我们需要自定义 404 页面,或者返回 JSON 数据。
下面是一些常见的方法:
如果您需要自定义 404 页面,可以将以下代码添加到 Flask 应用程序中:
from flask import Flask, render_template
app = Flask(__name__)
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
在上述代码中,@app.errorhandler(404)
装饰器告诉 Flask 该函数是处理 404 错误的函数。如果您想返回 HTML 页面,可以使用 Flask 提供的 render_template
方法。请注意,需要在返回值中包含 HTTP 状态码 404。
如果您要返回 JSON 数据而不是 HTML 页面,则可以使用以下代码:
from flask import Flask, jsonify
app = Flask(__name__)
@app.errorhandler(404)
def page_not_found(e):
return jsonify({"error": "Not found"}), 404
在上述代码中,jsonify
函数将一个字典转换为 JSON 对象,并使用 Flask 中的 make_response
函数将其包装成一个响应。同样,需要在返回值中包含 HTTP 状态码 404。
如果您想根据请求的 Accept 头部信息来返回不同类型的响应数据,可以像下面的例子一样使用多个错误处理函数:
from flask import Flask, jsonify, render_template
app = Flask(__name__)
@app.errorhandler(404)
def not_found_error(e):
if request.accept_mimetypes.accept_json and \
not request.accept_mimetypes.accept_html:
response = jsonify({'error': 'not found'})
response.status_code = 404
return response
# response_type 默认返回 HTML 页面
return render_template('404.html'), 404
在上述代码中,accept_json
和 accept_html
属性可以判断是否接受 JSON 或 HTML 响应。
现在您可以根据不同的情况返回不同类型的响应数据了。