zoukankan      html  css  js  c++  java
  • REST framework 视图层

    我们之前写的  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
  • 相关阅读:
    CF140C New Year Snowmen
    CF1131G Most Dangerous Shark
    莫比乌斯函数&欧拉函数&筛法 综合运用
    【51nod1220】约数之和
    题解[CF1228E Another Filling the Grid]
    dsu on tree学习笔记
    线性基学习笔记
    题解[CF895C Square Subsets]
    博弈论学习笔记
    题解[ [JSOI2007]文本生成器 ]
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9410438.html
Copyright © 2011-2022 走看看