好嘞!下面给你整理一个 Django REST Framework 常用类与功能的速查表,方便快速查阅和记忆:
DRF 常用类功能速查表
分类 | 类/函数名 | 作用/功能描述 | 使用场景举例 |
---|---|---|---|
序列化器 | Serializer | 基础序列化器,手写字段和验证逻辑 | 自定义复杂结构序列化 |
ModelSerializer | 根据 Django 模型自动生成字段和验证 | 快速生成基于模型的序列化 | |
视图 | APIView | DRF 基础视图,支持 HTTP 方法重写 | 自定义复杂业务逻辑 |
GenericAPIView | 基础通用视图,提供 queryset、serializer 等属性 | 基于 queryset 快速扩展视图 | |
通用视图 | ListAPIView | 只读列表视图 | 返回模型列表数据 |
RetrieveAPIView | 只读详情视图 | 返回单条模型数据详情 | |
CreateAPIView | 创建数据视图 | 接收 POST 创建数据 | |
UpdateAPIView | 更新数据视图 | 接收 PUT/PATCH 更新数据 | |
DestroyAPIView | 删除数据视图 | 接收 DELETE 删除数据 | |
视图集 | ViewSet | 不具体实现方法的视图集 | 自定义路由、行为复杂时使用 |
GenericViewSet | 结合通用视图与视图集 | 配合 mixins 快速构建视图集 | |
ModelViewSet | 集成 CRUD 操作的视图集 | 典型的增删改查接口,配合路由快速开发 | |
路由 | DefaultRouter | 自动生成标准 REST 路由,带浏览器界面 | 推荐用于 ModelViewSet |
SimpleRouter | 自动生成路由,但不带根视图 | 轻量路由,避免根视图 | |
权限 | AllowAny | 允许任何访问 | 开发阶段或公开 API |
IsAuthenticated | 只允许认证用户访问 | 保护接口需登录用户访问 | |
IsAdminUser | 只允许管理员用户访问 | 管理员专用接口 | |
IsAuthenticatedOrReadOnly | 认证用户可写,未认证只能读 | 大多数公开接口读,写权限限制 | |
认证 | BasicAuthentication | HTTP Basic 认证 | 简单的用户名密码认证 |
SessionAuthentication | 基于 Django Session 认证 | 适合传统网站登录 | |
TokenAuthentication | Token 认证 | API Token 认证 | |
JWTAuthentication | JWT 认证(第三方包) | 现代 API 认证方式 | |
分页 | PageNumberPagination | 基于页码分页 | 常用分页,参数 ?page=1 |
LimitOffsetPagination | 基于偏移量分页 | 参数 ?limit=10&offset=20 | |
CursorPagination | 基于游标分页,效率高 | 需要高性能分页场景 | |
过滤 | DjangoFilterBackend | 基于字段过滤,需安装 django-filter | 精准字段过滤 |
SearchFilter | 关键字模糊搜索 | ?search=关键词 | |
OrderingFilter | 排序功能 | ?ordering=field | |
响应 | Response | DRF 响应对象,支持内容协商 | 返回 JSON 或其他格式 |
异常 | APIException | 基础异常类 | 自定义异常处理 |
装饰器 | @api_view | 将函数视图转换成 DRF 视图 | 简单的函数式接口 |
@action | 在 ViewSet 中定义自定义路由动作 | 添加非标准动作(如 /users/{id}/activate/ ) |
简单示例调用
from rest_framework import viewsets, serializers
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.pagination import PageNumberPagination
# Serializer
class MovieSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = '__all__'
# Pagination
class MyPagination(PageNumberPagination):
page_size = 10
# ViewSet
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
permission_classes = [IsAuthenticated]
pagination_class = MyPagination
@action(detail=True, methods=['post'])
def highlight(self, request, pk=None):
movie = self.get_object()
# 自定义动作
return Response({'status': f'Movie {movie.title} highlighted!'})
如果你需要,我还可以帮你做成 Markdown 表格、PDF、或者生成可直接用的示例代码包!你想要哪种?