10.APIView视图
from rest_framework import status from rest_framework.response import Response from snippets.models import Snippet from snippets.serializers import SnippetSerizlizer from rest_framework.decorators import APIView # 导入APIView from django.http.response import Http404 # 定义 类视图 继承APIView # 内部定义对应的请求方法,会根据前端的请求类型做不同的操作 class SnippetList(APIView): # 定义get方法 def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerizlizer(snippets, many=True) return Response(serializer.data) # 定义post方法 def post(self, request, format=None): serializer = SnippetSerizlizer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class SnippetDEtail(APIView): def get_object(self, pk): try: snippet = Snippet.objects.get(pk=pk) return snippet except Snippet.DoesNotExist: # 如果查询不到传入的pk字段,则执行以下代码 return Http404 def get(self, request, pk, format=None): snippet = self.get_object(pk) serializer = SnippetSerizlizer(snippet) return Response(serializer.data) # 定义put方法 def put(self, request, pk, format=None): snippet = self.get_object(pk) serializer = SnippetSerizlizer(snippet, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # 定义删除方法 def delete(self, request, pk, format=None): snippet = self.get_object(pk) snippet.delete() return Response(status=status.HTTP_204_NO_CONTENT)
urlpatterns = [ path('snippets/',views.SnippetList.as_view()), path('snippets/<int:pk>/',views.SnippetDEtail.as_view()) ]
风月都好看,人间也浪漫.