# **DRF Response 对象**
DRF Response 对象
1. 概念
- Response 是 DRF 对 Django 原生
HttpResponse
的封装。 - 作用:
- 统一返回 REST API 的响应数据。
- 支持内容协商(Content Negotiation),根据客户端
Accept
头自动选择返回格式(JSON、XML、HTML 等)。 - 支持状态码、头信息和数据结构统一管理。
- 典型场景:在 API 视图中直接返回
Response(data, status, headers)
。
2. Response 与 HttpResponse 的关系
- 本质上,DRF 的
Response
是HttpResponse
的子类或包装器。 - 增强功能:
- 自动渲染:将 Python 对象(字典、列表)渲染为客户端可接受的格式。
- 简化返回:直接返回数据,而无需手动转换成 JSON 或设置内容类型。
- 状态码支持:直接指定 HTTP 状态码,如 200、201、400 等。
- 可扩展性:配合 Renderer、Middleware、Header 处理更灵活。
3. 主要属性
.data
- 响应数据,可以是字典、列表或任何可序列化对象。
- 在渲染前存储 Python 原生对象。
.status_code
- HTTP 状态码,如 200、201、404、500 等。
- 默认 200 OK。
.headers
- 响应头信息,可自定义添加,如
Content-Type
、Location
等。
- 响应头信息,可自定义添加,如
.accepted_renderer
- DRF 内部使用,表示根据客户端请求选择的渲染器。
.accepted_media_type
- 客户端请求的媒体类型(如
application/json
)。
- 客户端请求的媒体类型(如
.renderer_context
- 渲染器上下文,包括请求对象、视图对象、格式等信息,用于渲染数据。
4. 核心功能
- 自动渲染数据:
- 根据客户端请求头自动选择 Renderer(JSONRenderer、BrowsableAPIRenderer 等)
- 渲染
.data
为最终返回内容
- 设置状态码:
- 可以直接指定 HTTP 响应状态码,不必手动生成 HttpResponse
- 设置响应头:
- 可自定义 HTTP headers,如
Location
、Cache-Control
等
- 可自定义 HTTP headers,如
- 与中间件/认证集成:
- 可通过 Response 对象携带自定义数据或认证信息,方便统一处理
5. 使用场景
- API 视图返回数据:
- 返回序列化后的数据字典或列表
- 设置状态码:
- 如创建资源返回 201 Created、错误返回 400 Bad Request
- 返回错误信息:
- 将错误信息以统一结构返回给客户端
- 自定义 HTTP 头:
- 用于重定向、缓存控制或认证信息
总结:
- DRF 的
Response
是HttpResponse
的增强封装,核心作用是 统一、可扩展、自动渲染 API 响应。 - 核心属性:
.data
、.status_code
、.headers
、.accepted_renderer
、.renderer_context
- 核心优势:简化 API 返回操作、支持内容协商、便于状态码和头信息管理。