Flask响应机制详解:元组、make_response与特殊响应处理
本文深入解析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响应的内容,请查阅本站往期文章或继续浏览后续教程。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













