Flask响应机制详解:元组、make_response与特殊响应处理

顾星河
顾星河
发布时间:2026-10-14 | 2人浏览过
原创

本文深入解析Flask中HTTP响应的多种构建方式。涵盖通过元组返回状态码与响应头、利用make_response对象定制响应、使用jsonify处理JSON数据,以及redirect和abort实现重定向与中断。通过具体代码示例,帮助开发者掌握Flask响应机制的核心用法。

引言

当客户端向Flask应用发起HTTP请求时,Flask会调用对应的视图函数,并将该函数的返回值直接作为响应内容发送给客户端。通常情况下,这个返回值是一个简单的字符串,会被封装为HTML页面返回给浏览器。然而,HTTP协议对响应的要求远不止于此,其中状态码是关键组成部分。Flask默认将状态码设置为200,表示请求已成功处理。

response响应

元组形式响应

如果视图函数需要返回不同的HTTP状态码,可以在响应文本后追加数字代码作为第二个返回值。例如,返回一个包含状态码的元组。


from flask import Flask

app = Flask(__name__)


# 以元组形式返回响应信息
@app.route("/index")
def index():
    #      响应体        状态码
    return "index page", 400

视图函数的返回值还可以包含第三个参数,用于指定响应头(Headers)。响应头可以以字典或列表形式传递。


from flask import Flask

app = Flask(__name__)


# 以元组形式返回响应信息
@app.route("/index")
def index():
    header_dict = {
        "name": "jack",
        "age": 22
    }

    header_list = [("name", "hui"), ("age", 21)]

    #      响应体        状态码    响应头
    return "index page", 400, header_dict
    # return "index page", 400, header_list

需要注意的是,响应头信息必须被包装在字典或列表中。字典形式直观易懂;列表形式则要求每个元素为包含键值对的元组。虽然示例中仅展示结构,但在实际开发中,应根据需求合理设置响应头信息,例如指定内容类型或设置Cookie。


header_dict = {
    "Content-Type": " text/html; charset=utf-8",   # 响应返回的数据类型
    "Set-Cookie": "name=hui; Path=/"        # 响应设置cookie
}
return "index page", 200, header_dict   

浏览器开发者工具查看响应信息

重要提示:以元组形式返回响应时,各参数的位置必须严格对应,不可随意调换。

元组中第一个元素对应响应体(Response Body);第二个元素对应HTTP状态码(Status Code);第三个元素对应响应头(Response Headers)。

make_response函数

若不想使用元组返回值,Flask视图函数还可以直接返回Response对象。make_response函数可以接受1个、2个或3个参数(与视图函数返回值格式一致),并返回一个Response对象。具体用法如下所示。


from flask import Flask, make_response

app = Flask(__name__)

# mk_response 设置响应信息
@app.route("/info")
def info():
    resp = make_response("info page")
    resp.status = "666 ithui"
    resp.headers["name"] = "hui"
    resp.headers["age"] = 21
    return resp

注意:在使用make_response()生成的对象设置状态码时,必须使用字符串格式,而非数字。

返回json格式数据


import json
from flask import Flask, make_response

app = Flask(__name__)


@app.route("/json")
def resp_json():
    data = {
        "name": "hui",
        "age": 21
    }

    json_str = json.dumps(data)
    headers = {"Content-Type": "application/json"}
    return json_str, 200, headers

虽然可以使用Python内置的json模块将数据序列化为JSON字符串,但在Web开发中返回JSON数据时,通常需要明确指定Content-Type。Flask默认的响应类型是text/html,因此需要手动设置响应体的内容类型为application/json。

鉴于JSON格式在Web开发中的高频使用,Flask专门提供了jsonify()函数来简化JSON数据的响应处理。

具体使用示例如下。


from flask import Flask, jsonify

app = Flask(__name__)


@app.route("/json")
def resp_json():
    data = {
        "name": "hui",
        "age": 21
    }
    return jsonify(data)
    # return jsonify(name="jack", age=20)

jsonify()函数既可以接收字典对象,也可以通过关键字参数(key-value形式)构建JSON数据,这大大简化了开发过程。

其他特殊响应

redirect() 重定向

重定向是一种特殊的响应类型,它不包含页面文档,而是指示浏览器加载一个新的URL地址。


from flask import Flask, redirect

app = Flask(__name__)

# 自己设置重定向信息
@app.route('/baidu')
def red_baidu():
    resp = make_response()
    resp.status = "302"
    resp.headers['Location'] = "http://www.baidu.com"
    return resp


# redirect 响应重定向
@app.route("/csdn")
def red_csdn():
    csdn_url = "https://blog.csdn.net/qq_43629857"
    return redirect(csdn_url)

重定向通常使用302状态码,并通过Location头部指定新地址。由于该功能使用频繁,Flask提供了辅助函数redirect()来生成此类响应。

abort() 中断

abort()函数接收一个HTTP状态码作为参数,用于立即终止视图函数的执行并返回错误响应。


from flask import Flask, request, abort

app = Flask(__name__)

# abort中断
# http://127.0.0.1:5000/login?name=hui&pwd=123
@app.route("/login", methods=['GET'])
def login():
    name = request.args.get("name")
    pwd = request.args.get("pwd")
    if name != "hui" or pwd != "123":
        abort(404)

    return "登录成功"

通常,abort()函数会配合app.errorhandler()装饰器一起使用,以便自定义错误信息的返回格式。


# 处理404状态错误
@app.errorhandler(404)
def handle_404_err(err):
    return f"404 错误信息 {err}"


# 处理500状态错误
@app.errorhandler(500)
def handle_500_err(err):
    return f"500 服务器错误 {err}"


# abort中断
# http://127.0.0.1:5000/login?name=hui&pwd=123
@app.route("/login", methods=['GET'])
def login():
    name = request.args.get("name")
    pwd = request.args.get("pwd")
    if name != "hui" or pwd != "123":
        abort(404)

    return "登录成功"

源代码

完整源代码已上传至Gitee仓库 HuiDBK/FlaskBasic,欢迎访问码云查看。

本文介绍了Flask中Response响应的具体使用方法,包括元组返回、make_response、JSON处理及特殊响应等。更多关于Flask response响应的内容,请查阅本站往期文章或继续浏览后续教程。感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表