mixins的玩法
from rest_framework import mixinsfrom rest_framework import genericsclass AuthorView(mixins.CreateModelMixin, mixins.ListModelMixin, generics.GenericAPIView): # 初始化两个变量 queryset = Author.objects.all() serializer_class = AuthorModelSerializer def get(self, request, *args, **kwargs): return self.list(self, request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.create(self, request, *args, **kwargs)class AuthorDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): # 初始化两个变量 queryset = Author.objects.all() serializer_class = AuthorModelSerializer def get(self, request, *args, **kwargs): return self.retrieve(self, request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(self, request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(self, request, *args, **kwargs)
generic的玩法
from rest_framework import mixinsfrom rest_framework import genericsclass AuthorView(generics.ListCreateAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializerclass AuthorDetailView(generics.RetrieveUpdateDestroyAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializer
终极玩法
views.py
from rest_framework import viewsetsclass AuthorViewSet(viewsets.ModelViewSet): queryset = Author.objects.all() serializer_class = AuthorModelSerializer
urls.py
# 方式一,自己手写urlpatterns = [ url(r'^authors/$', views.AuthorViewSet.as_view({ "get": "list", "post": "create"}), name="author_list"), url(r'^authors/(?P\d+)/$', views.AuthorViewSet.as_view({ "get": "retrieve", "put": "update", "delete": "destroy"}), name="author_detail"),]# 方式二,针对上面的两条url的分发from rest_framework import routersrouters = routers.DefaultRouter()routers.register("authors", views.AuthorViewSet) # authors是url前缀urlpatterns = [ url(r'', include(routers.urls)), (等同于方式一的写法)]