2020-06-25 | Backend 中文
DRF GenericAPIView:减少 CRUD 重复代码
bibi45
用通用视图和 Mixin 表达常见资源接口,同时保留查询与权限控制点。
This article is currently available in Chinese. The language switch changes the site interface; the original text is shown below.
ListCreateAPIView、RetrieveUpdateDestroyAPIView 等通用视图由 GenericAPIView 和 Mixin 组合而成,适合典型资源接口。
class ProjectList(generics.ListCreateAPIView):
serializer_class = ProjectSerializer
def get_queryset(self):
return Project.objects.filter(owner=self.request.user)
动态查询必须放在 get_queryset(),不要直接复用已求值的 self.queryset。这样既不会意外缓存结果,也能把数据范围限制在当前用户可见对象内。