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)),    (等同于方式一的写法)
]
原文地址:https://www.cnblogs.com/sunch/p/9993633.html