[ DRF-ModelsViewSet基本用法 ]


一. 视图

class AccountViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializers

    # 一. 重写获取queryset的方法
    def get_queryset(self):
        ...
        1. 直接获取self.queryset
        2. 判断是否是queryset类型
        3. 返回queryset

    # 二. 重写获取单个实例的方法
    def get_objects()
        ...
        1. 第一步过滤filter_queryset -> self.get_queryset()
            1.1 获取self.filter_backends列表
            1.2 循环序列化过滤器的.filter_queryset(方法)

        2. 获取self.lookup_url_kwarg 设置的pk值, 默认为pk, 设置到kwargs

        3. 进入get_object_or_404(**kwargs)
            3.1 获取模型的默认管理器manager相当于objects, 再.all()全部
            3.2 返回.get(id=pk)

        4. 验证权限check_object_permissions(request, obj)
            4.1 循环实例化self.permission_classes权限列表
            4.2 执行每个权限对象的self.has_object_permission方法, 此方法返回的是Bool
                4.2.1 否则响应异常信息, 真则通过
        5. 返回queryset

    # 三. 重写获取序列化器的方法
    def get_seializers()
        1. self.get_serializers_class()
            1.1 里面根据条件返回不同的序列化器
        2. self.get_serializer_context()
            2.1 可以配置保存上下文默认为'content': {request':request, 'view'...'format'...}
            2.2 解释: 可以通过self.context['request']获取