ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/3 12:05:59 拓冰建站 浏览量
Flask入门教程(二十五):响应对象API——构建HTTP响应的完整指南 1. 构造函数from flask import Response # 方式一直接创建Response对象 resp Response(Hello World, status200, 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/jsoncontent_typestrNoneContent-Type头含编码direct_passthroughboolFalse为True时直接传递响应体2. 核心属性属性类型说明statusstr响应状态文本形式如200 OKstatus_codeintHTTP状态码如200、404headersHeaders响应头对象支持字典式操作databytes响应体的字节表示mimetypestrMIME类型不含编码如text/htmlcontent_typestrContent-Type含编码如text/html; charsetutf-8content_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() —— 设置Cookiepython复制下载resp make_response(Cookie已设置) resp.set_cookie( keytheme, valuedark, max_age86400, # 有效期24小时秒 path/, # 作用路径 domain.example.com, # 域名 secureTrue, # 仅HTTPS传输 httponlyTrue, # 禁止JavaScript访问 samesiteLax # SameSite限制 )set_cookie参数详解参数类型说明keystrCookie名称valuestrCookie值max_ageint有效秒数如3600表示1小时expiresdatetime过期时间与max_age二选一pathstrCookie适用的路径domainstrCookie适用的域名securebool仅通过HTTPS发送httponlybool禁止JavaScript访问samesitestrStrict、Lax或Nonedelete_cookie() —— 删除Cookieresp make_response(Cookie已删除) resp.delete_cookie(theme) # 默认删除根路径 resp.delete_cookie(theme, path/admin) # 指定路径5. 响应的常见构建方式方式代码适用场景直接返回字符串return h1Hello/h1简单HTML直接返回字典return {status: ok}JSON APIFlask自动序列化返回元组return Not Found, 404自定义状态码返回元组头return OK, 200, {X-Header: v}自定义状态码响应头使用make_responseresp make_response(body)需要精细控制直接创建Responsereturn Response(body, status201)完全控制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(h1Hello, RUNOOB!/h1) # 设置状态码 resp.status_code 201 # 设置响应头 resp.headers[X-Custom-Header] my-value # 设置Cookie24小时有效 resp.set_cookie(theme, dark, max_age86400) resp.set_cookie(lang, zh-CN, samesiteLax) 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第{i1}行数据\n return Response(generate(), mimetypetext/plain) # 5. 文件下载 app.route(/download) def download_file(): from io import BytesIO data BytesIO(bHello, RUNOOB!) return Response( data.getvalue(), mimetypetext/plain, headers{Content-Disposition: attachment; filenamehello.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 resp7. 响应对象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)设置CookieCookieresp.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 Error8. 常见用法总结场景代码返回JSONreturn {status: ok}返回HTMLreturn render_template(page.html)返回404return Not Found, 404重定向return redirect(url_for(index))设置Cookieresp.set_cookie(key, value, max_age3600)设置响应头resp.headers[X-Key] value文件下载Response(data, headers{Content-Disposition: attachment; filename...})流式响应Response(generate(), mimetypetext/plain)小结本章全面讲解了Flask响应对象的完整API。Response类通过Response(body, status, headers)创建更推荐使用make_response(body)函数核心属性包括status_code、headers、data、mimetype响应头通过headers[Key] value设置Cookie通过set_cookie(key, value, max_age, secure, httponly, samesite)设置通过delete_cookie(key)删除视图函数可返回字符串、字典、元组、Response对象等Flask会自动转换。熟练掌握响应对象的API有助于构建符合HTTP规范的完整响应。