我们之前写的 get post 请求 要写很多 我们现在可以使用rest——framework给我们封装好的类
GenericAPIView
给我们提供了自动匹配验证的信息内部封装
from rest_framework.generics import GenericAPIView
提供了两个固定字段:
queryset 获取的是你的所有的表的对象
serializer_class 是让你的信息自动匹配
queryset = models.Comment.objects.all()
serializer_class = first_serializers.Commentserializer
我们以前使用get或者post需要自己定义逻辑 进行匹配 很麻烦 现在提供了 精简的类帮我们进行匹配校验
get请求:ListModelMixin 查看你的所有的信息
导入:
from rest_framework.mixins import ListModelMixin,CreateModelMixin
我们继承这个类 然后再调用这个类的self.list(request,*args,**kwargs) 就完成了get的流程
class CommentView(GenericAPIView,ListModelMixin,CreateModelMixin): ''' GenericAPIView 提供了queryset 和serializer_class 进行序列化并且校验 ''' queryset = models.Comment.objects.all() serializer_class = first_serializers.Commentserializer def get(self,request,*args,**kwargs): return self.list(request,*args,**kwargs)
post请求:CreateModelMixin 创建信息
继承这个类 然后调用这个类的 self.create(request,*args,**kwargs) 就完成了post的请求并且创建了信息
class CommentView(GenericAPIView,ListModelMixin,CreateModelMixin): ''' GenericAPIView 提供了queryset 和serializer_class 进行序列化并且校验 ''' queryset = models.Comment.objects.all() serializer_class = first_serializers.Commentserializer def get(self,request,*args,**kwargs): return self.list(request,*args,**kwargs) def post(self,request,*args,**kwargs): print('要添加评论了') return self.create(request,*args,**kwargs)
详细显示 指定的显示哪一个内容 RetrieveModelMixin
导入:
from rest_framework.mixins import RetrieveModelMixin
这个是你要指定你查看的信息的id查看的是详细的信息
这个是使用
return self.retrieve(request,pk)
来把你指定的信息返回
class Comment_DetailView(GenericAPIView,RetrieveModelMixin): queryset = models.Comment.objects.all() serializer_class = first_serializers.Commentserializer def get(self,request,pk): return self.retrieve(request,pk)
delete :删除信息 DestroyModelMixin
这个指定删除哪一项:
最后调用
self.destroy(request, pk)
并且我们可以调用其中的方法来告诉我们删除成功了:
# def delete(self, request, pk): # return self.destroy(request, pk) # # def perform_destroy(self, instance): #调用这个方法返回给我们删除额信息 # print("你要删除了...") # instance.delete()
class Comment_DetailView(GenericAPIView,RetrieveModelMixin,DestroyModelMixin): queryset = models.Comment.objects.all() serializer_class = first_serializers.Commentserializer def get(self,request,pk): #查看信息
return self.retrieve(request,pk) def delete(self, request, pk): # 删除信息return self.destroy(request, pk)
put :修改信息 UpdateModelMixin
调用了
self.update(request, pk)
所有的数据发送额必须是json格式 (建议使用Postman)
多个封装:RetrieveUpdateDestroyAPIView
其中封装了校验模块 GenericAPIView 修改模块: UpdateModelMixin 删除模块: DestroyModelMixin 详细查看模块:RetrieveModelMixin
from rest_framework.generics import GenericAPIView, RetrieveUpdateDestroyAPIView, ListCreateAPIView
# class CommentDetailView(RetrieveUpdateDestroyAPIView): # queryset = models.Comment.objects.all() # serializer_class = app01_serializers.CommentSerializer
然后直接使用就可以了
ListCreateAPIView :封装了查看 ListModelMixin 和post的 CreateModelMixin
# class CommentView(ListCreateAPIView): # queryset = models.Comment.objects.all() # serializer_class = app01_serializers.CommentSerializer #
最终我们回想这么麻烦会不会有一个可以把所有的都给继承下来的呢:
最终大BOSS
所有的都可以使用: ModelViewSet
from rest_framework.viewsets import ModelViewSet
直接这样使用就可以用post或者get所有的使用了
class CommentViewSet(ModelViewSet): queryset = models.Comment.objects.all() serializer_class = app01_serializers.CommentSerializer
这个我们就要想想 你的get和post put的请求不一样有的需要pk有的不需要 这个时候就要有一个同意的url了防止你设置过多的url
from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(r'comment', views.CommentViewSet) #这个就是设置你的输入并且查找的视图 urlpatterns += router.urls