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

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

本文深入解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。