django rest framework 快速指南
2025年11月22日大约 2 分钟约 711 字
API指南介绍
- Requests
- 对 Django 原生 HttpRequest 的增强版本,处理 API 请求时更方便地获取提交的数据。
- 将 JSON / form-data / multipart 等各种请求体进行统一解析,提供 request.data、request.query_params 这种更方便的 API。
- Responses
- 封装 Django HttpResponse,自动根据需求输出 JSON 或其他格式,返回 API 数据给前端。
- 自动渲染数据为 JSON(或其他 Renderer),带有统一的内容协商(Content negotiation)。
- Views/Generic views/ViewSets
- APIView: 最底层,手写全部逻辑,需要完全自定义
- Generic Views: 内置 CRUD 操作,简化常规开发
- ViewSets: 根据动作自动生成路由,最大化减少重复代码
- Routers
- 自动为 ViewSet 生成 URL 路由,不再手写大量 urls.py
- UserViewSet 自动生成
/users//users/<pk>/
- Parsers
- 让 DRF 能读取各种格式的数据
- 解析请求体格式,如: JSONParser FormParser MultiPartParser
- Renderers
- 控制响应以何种格式输出,支持多格式输出、API 浏览器:JSONRenderer、BrowsableAPIRenderer(网页调试界面)
- Serializers
- 负责数据序列化和反序列化(Python ↔ JSON)
- 将模型转换为 JSON,校验输入数据
- Serializer fields
- 定义序列化字段,如 CharField、IntegerField、EmailField。
- Serializer relations
- 序列化外键/多对多关系,如:PrimaryKeyRelatedField StringRelatedField Nested relationships
- Validators
- 为序列化器字段做验证,统一和模块化的输入数据校验。
- Authentication
- 身份认证机制,识别用户是谁:Token Auth、JWT、Session Authentication
- Permissions
- 控制用户是否有权限访问 API,比如只允许管理员访问某接口。
- Caching
- 提供缓存 API 的机制,提高 API 性能、减少数据库压力。
- Throttling
- 限制 API 请求频率(如每分钟几次),防止恶意刷接口。
- Filtering
- 支持数据过滤,快速实现搜索和排序:
?search=?ordering=
- 支持数据过滤,快速实现搜索和排序:
- Pagination
- 分页输出数据。
- Versioning
- 为 API 设置版本,如 v1、v2,升级 API 而不破坏旧版本。
- Content negotiation
- 根据请求头自动选择响应格式,支持 JSON、HTML、XML 自动切换。
- Metadata
- 返回 API 的元信息,Browsable API 页面需要显示字段信息。
- Schemas
- 自动生成 API 文档,如 OpenAPI/Swagger,给前端/第三方提供 API 文档。
- Format suffixes
- 允许 URL 增加 .json、.api 等后缀:
/users/1.json
- 允许 URL 增加 .json、.api 等后缀:
- Returning URLs
- 序列化器中返回 URL 字段(超链接 API):
HyperlinkedModelSerializer
- 序列化器中返回 URL 字段(超链接 API):
- Exceptions
- 统一处理异常并返回标准格式的错误响应,抛出 ValidationError 自动返回 HTTP 400。
- status codes
- 提供语义化的 HTTP 状态码常量,如:
status.HTTP_400_BAD_REQUEST
- 提供语义化的 HTTP 状态码常量,如:
- Testing
- 单元测试,提供 API 测试工具,如 APIClient。
- Settings
- 全局配置,比如: 默认认证类 分页配置 渲染器配置
请求 requests
request.data- 同
request.POST+request.FILES
- 同
request.query_params- 同
request.GET
- 同
响应 responses
rest_framework.response.Response- 签名: Response(data, status=200, template_name=None, headers=None, content_type=None)
属性:
- response.data
- response.status_code
- response.content
.render()渲染后的内容
示例:
from rest_framework.response import Response
# 返回ok字符串
return Response('ok')