建议搭配源码阅读更好
字面意思,就是models的queryset, 一般通过 models.someModel.objects.all() 赋值
序列化的类,可以自己定制序列化的类赋值来决定序列化哪个模型,怎么序列化
通常的序列的语句如下:重要的是第二句,要传入 queryset 对象
planObj = models.Plan.objects.all()
planSer = myAppSerializer.PlanSerializer(instance=planObj, many=True) # 重要
print(planSer.data) # 这个是序列化的数据
return Response(planSer.data)
url('^api/v1/plan/(?P\d+)/$', views.PlanView.as_view({'get':'retrieve'}), name='plan2'),
url 中正则表达式查询的关键参数名,上面那个是要查询的字段名,下面那个是传进来的的值名,当然只写上面那个也可以,这样两个都一样。
过滤规则,即传入参数 ?canshu=canshu,时的过滤规则,这个要自己创立一个类来进行过滤
分页的类,可以自己定制分页的类赋值来决定分页哪个模型,怎么分页
通常的分页的语句如下:重要的是第二句和第三句,先实例化分页对象得到pg,然后调用 paginate_queryset()来分页,当然传入的还是 queryset
roles = models.Role.objects.all() #获取所有数据
pg = MyPageNumberPagination() # 实例化一个分页对象
pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self) # 把querySet数据传进去
ser = PageSerialiser(instance=pager_roles, many=True) # 对数据进行序列化
ret = pg.get_paginated_response(ser.data)
return ret
这个方法很简单,就是返回一个你传进 queryset 属性的 queryset 对象
这个方法主要是获得单个模型对象:
1. 先对 queryset 进行过滤(调用 filter_queryset 函数根据我们定制的过滤规则 filter_backends 进行过滤)
2. 获取要筛选的字段(这里主要用的是lookup属性来进行筛选,也就是url中的参数)
3. 运用 get_object_or_404 获取单个对象
4. 查看是否有权限
5. 返回对象
获取序列化的类,获取上下文,上下文有 request 等,然后对 serializer_class(*args, **kwargs) 进行序列化,返回的是序列化对象,也就是序列化属性中的 planSer
获取我们定义的序列化类,这个可以搭配上面的方法使用
获取上下文信息,主要有 request, format, view(self)
过滤 queryset , 只要知道传入 queryset,返回过滤后的 queryset。 过滤规则要另写,然后赋值给 filter_backends 就行了
1. 判断是否有分页对象
2. 有则赋值给 self._paginator 没有则赋值 None 给 self._paginator
1. 判断是否有分页属性
2. 没有则返回None,有则进行分页操作,分页操作关键就是上面分页属性中的一句类似的,就是传入参数 request 和 view
return self.paginator.paginate_queryset(queryset, self.request, view=self)
返回的是具有额外属性 Response 的分页对象
return self.paginator.get_paginated_response(data)