drf_viewsets和routers
1、使用viewset重构view.py
from rest_framework import viewsets from django.contrib.auth.models import User from snippets.serializers import UserSerializer class UserViewSet(viewsets.ReadOnlyModelViewSet): """ This viewset automatically provides `list` and `detail` actions. """ queryset = User.objects.all() serializer_class = UserSerializer
from rest_framework.decorators import action from rest_framework.response import Response from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import permissions from snippets.permissions import IsOwnerOrReadOnly from rest_framework import renderers class SnippetViewSet(viewsets.ModelViewSet): """ This viewset automatically provides `list`, `create`, `retrieve`, `update` and `destroy` actions. Additionally we also provide an extra `highlight` action. """ queryset = Snippet.objects.all() serializer_class = SnippetSerializer permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly,) @action(detail=True, renderer_classes=[renderers.StaticHTMLRenderer]) def highlight(self, request, *args, **kwargs): snippet = self.get_object() return Response(snippet.highlighted) def perform_create(self, serializer): serializer.save(owner=self.request.user)
使用@action装饰器来创建名为的自定义操作highlight。此装饰器可用于添加任何不适合标准create/ update/ delete样式的自定义端点。
2、通过router将viewset绑定到url
from django.conf.urls import url, include from rest_framework.routers import DefaultRouter from snippets import views # Create a router and register our viewsets with it. router = DefaultRouter() router.register(r'snippets', views.SnippetViewSet) router.register(r'users', views.UserViewSet) # The API URLs are now determined automatically by the router. urlpatterns = [ url(r'^', include(router.urls)) ]
浙公网安备 33010602011771号