news 2026/9/3 12:05:50

Flask入门教程(二十五):响应对象API——构建HTTP响应的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flask入门教程(二十五):响应对象API——构建HTTP响应的完整指南

1. 构造函数

from flask import Response # 方式一:直接创建Response对象 resp = Response("Hello World", status=200, headers={"X-Custom": "value"}) # 方式二:使用make_response(推荐) from flask import make_response resp = make_response("Hello World") resp.status_code = 201 resp.headers["X-Custom"] = "value"

构造函数参数

参数类型默认值说明
responsestr/bytes/iterator必填响应体内容
statusint/str200HTTP状态码或状态文本
headersdict/listNone响应头
mimetypestrNoneMIME类型,如"application/json"
content_typestrNoneContent-Type头,含编码
direct_passthroughboolFalseTrue时直接传递响应体

2. 核心属性

属性类型说明
statusstr响应状态(文本形式),如"200 OK"
status_codeintHTTP状态码,如200404
headersHeaders响应头对象,支持字典式操作
databytes响应体的字节表示
mimetypestrMIME类型(不含编码),如"text/html"
content_typestrContent-Type(含编码),如"text/html; charset=utf-8"
content_lengthint响应体字节长度

3. 响应头操作

from flask import make_response resp = make_response("Hello") # 获取响应头 value = resp.headers.get("Content-Type") # 设置响应头 resp.headers["X-Custom-Header"] = "my-value" # 批量更新 resp.headers.update({ "X-RateLimit-Limit": "100", "X-RateLimit-Remaining": "50" }) # 删除响应头 del resp.headers["X-Custom-Header"]

4. Cookie操作

set_cookie() —— 设置Cookie

python

复制

下载

resp = make_response("Cookie已设置") resp.set_cookie( key="theme", value="dark", max_age=86400, # 有效期24小时(秒) path="/", # 作用路径 domain=".example.com", # 域名 secure=True, # 仅HTTPS传输 httponly=True, # 禁止JavaScript访问 samesite="Lax" # SameSite限制 )

set_cookie参数详解

参数类型说明
keystrCookie名称
valuestrCookie值
max_ageint有效秒数,如3600表示1小时
expiresdatetime过期时间(与max_age二选一)
pathstrCookie适用的路径
domainstrCookie适用的域名
securebool仅通过HTTPS发送
httponlybool禁止JavaScript访问
samesitestr"Strict""Lax"None

delete_cookie() —— 删除Cookie

resp = make_response("Cookie已删除") resp.delete_cookie("theme") # 默认删除根路径 resp.delete_cookie("theme", path="/admin") # 指定路径

5. 响应的常见构建方式

方式代码适用场景
直接返回字符串return "<h1>Hello</h1>"简单HTML
直接返回字典return {"status": "ok"}JSON API(Flask自动序列化)
返回元组return "Not Found", 404自定义状态码
返回元组+头return "OK", 200, {"X-Header": "v"}自定义状态码+响应头
使用make_responseresp = make_response("body")需要精细控制
直接创建Responsereturn Response("body", status=201)完全控制

6. 完整代码示例

from flask import Flask, make_response, jsonify, request from datetime import datetime, timedelta app = Flask(__name__) # 1. 自定义响应头 + Cookie @app.route("/custom") def custom_response(): resp = make_response("<h1>Hello, RUNOOB!</h1>") # 设置状态码 resp.status_code = 201 # 设置响应头 resp.headers["X-Custom-Header"] = "my-value" # 设置Cookie(24小时有效) resp.set_cookie("theme", "dark", max_age=86400) resp.set_cookie("lang", "zh-CN", samesite="Lax") return resp # 2. 删除Cookie @app.route("/delete-cookie") def delete_cookie(): resp = make_response("Cookie已删除") resp.delete_cookie("theme") return resp # 3. 返回JSON(自动序列化) @app.route("/api/data") def api_data(): return {"status": "ok", "data": [1, 2, 3]} # 4. 流式响应(大文件传输) @app.route("/stream") def stream_response(): def generate(): for i in range(10): yield f"第{i+1}行数据\n" return Response(generate(), mimetype="text/plain") # 5. 文件下载 @app.route("/download") def download_file(): from io import BytesIO data = BytesIO(b"Hello, RUNOOB!") return Response( data.getvalue(), mimetype="text/plain", headers={"Content-Disposition": "attachment; filename=hello.txt"} ) # 6. 条件响应 @app.route("/conditional") def conditional(): # 如果客户端已缓存,返回304 Not Modified if request.headers.get("If-None-Match") == "abc123": return "", 304 resp = make_response("新内容") resp.headers["ETag"] = "abc123" return resp

7. 响应对象API速查表

类别方法/属性说明
创建Response(body, status, headers)创建响应对象
创建make_response(body)创建响应对象(推荐)
属性resp.status_code状态码
属性resp.headers响应头(字典式操作)
属性resp.data响应体(字节)
属性resp.mimetypeMIME类型
头操作resp.headers["X-Key"] = value设置响应头
头操作resp.headers.get("X-Key")获取响应头
Cookieresp.set_cookie(key, value, **options)设置Cookie
Cookieresp.delete_cookie(key)删除Cookie
# 常用状态码 STATUS_200 = 200 # OK STATUS_201 = 201 # Created STATUS_204 = 204 # No Content STATUS_301 = 301 # Moved Permanently STATUS_302 = 302 # Found STATUS_400 = 400 # Bad Request STATUS_401 = 401 # Unauthorized STATUS_403 = 403 # Forbidden STATUS_404 = 404 # Not Found STATUS_405 = 405 # Method Not Allowed STATUS_429 = 429 # Too Many Requests STATUS_500 = 500 # Internal Server Error

8. 常见用法总结

场景代码
返回JSONreturn {"status": "ok"}
返回HTMLreturn render_template("page.html")
返回404return "Not Found", 404
重定向return redirect(url_for("index"))
设置Cookieresp.set_cookie("key", "value", max_age=3600)
设置响应头resp.headers["X-Key"] = "value"
文件下载Response(data, headers={"Content-Disposition": "attachment; filename=..."})
流式响应Response(generate(), mimetype="text/plain")

小结

本章全面讲解了Flask响应对象的完整API。Response类通过Response(body, status, headers)创建,更推荐使用make_response(body)函数;核心属性包括status_codeheadersdatamimetype;响应头通过headers["Key"] = value设置;Cookie通过set_cookie(key, value, max_age, secure, httponly, samesite)设置,通过delete_cookie(key)删除;视图函数可返回字符串、字典、元组、Response对象等,Flask会自动转换。熟练掌握响应对象的API,有助于构建符合HTTP规范的完整响应。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 12:00:22

AgentScope 自定义模型集成:拆解基类契约与 4 个真实翻车点

AgentScope 自定义模型集成&#xff1a;拆解基类契约与 4 个真实翻车点 【免费下载链接】agentscope Build and run agents you can see, understand and trust. 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope 上周帮同事把一个企业内部 LLM 网关接进 A…

作者头像 李华
网站建设 2026/9/3 12:00:08

三维GIS/BIM标绘批量平移升降:数据驱动自动化操作实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:52:07

Z-Image-Turbo人像训练:从数据到推理解决AI生成的“变脸”难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:51:03

VelocityNote:带本地AI的轻量纯文本Markdown笔记工具实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华