一. 视图
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']获取