restframework视图三部曲
mixins的玩法
from rest_framework import mixins from rest_framework import generics class AuthorView(mixins.CreateModelMixin, mixins.ListModelMixin, generics.GenericAPIView): # 初始化两个变量 queryset = Author.objects.all() serializer_class = AuthorModelSerializer def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.create(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(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def delete(request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
generic的玩法
from rest_framework import mixins from rest_framework import generics class AuthorView(generics.ListCreateAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializer class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializer
终极玩法
views.py
from rest_framework import viewsets class 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<pk>\d+)/$', views.AuthorViewSet.as_view({"get": "retrieve", "put": "update", "delete": "destroy"}), name="author_detail"), ] # 方式二,针对上面的两条url的分发 from rest_framework import routers routers = routers.DefaultRouter() routers.register("authors", views.AuthorViewSet) # authors是url前缀 urlpatterns = [ url(r'', include(routers.urls)), (等同于方式一的写法) ]