📜  烧瓶返回 404 - Python (1)

📅  最后修改于: 2023-12-03 15:40:48.781000             🧑  作者: Mango

烧瓶返回 404 - Python

在 Flask 中,当烧瓶无法找到某个请求的资源时,会返回一个默认的 404 页面。但是有时候我们需要自定义 404 页面,或者返回 JSON 数据。

下面是一些常见的方法:

自定义 404 页面

如果您需要自定义 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 数据

如果您要返回 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_jsonaccept_html 属性可以判断是否接受 JSON 或 HTML 响应。

现在您可以根据不同的情况返回不同类型的响应数据了。