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

 

posted @ 2018-08-02 21:57  可爱的红领巾  阅读(257)  评论(0)    收藏  举报