Django REST Framework 常用类与功能的速查表

好嘞!下面给你整理一个 Django REST Framework 常用类与功能的速查表,方便快速查阅和记忆:


DRF 常用类功能速查表

分类类/函数名作用/功能描述使用场景举例
序列化器Serializer基础序列化器,手写字段和验证逻辑自定义复杂结构序列化
ModelSerializer根据 Django 模型自动生成字段和验证快速生成基于模型的序列化
视图APIViewDRF 基础视图,支持 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认证用户可写,未认证只能读大多数公开接口读,写权限限制
认证BasicAuthenticationHTTP Basic 认证简单的用户名密码认证
SessionAuthentication基于 Django Session 认证适合传统网站登录
TokenAuthenticationToken 认证API Token 认证
JWTAuthenticationJWT 认证(第三方包)现代 API 认证方式
分页PageNumberPagination基于页码分页常用分页,参数 ?page=1
LimitOffsetPagination基于偏移量分页参数 ?limit=10&offset=20
CursorPagination基于游标分页,效率高需要高性能分页场景
过滤DjangoFilterBackend基于字段过滤,需安装 django-filter精准字段过滤
SearchFilter关键字模糊搜索?search=关键词
OrderingFilter排序功能?ordering=field
响应ResponseDRF 响应对象,支持内容协商返回 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、或者生成可直接用的示例代码包!你想要哪种?

Scroll to Top