zoukankan      html  css  js  c++  java
  • restful_framework之视图组件

    一、基本视图

    写一个出版社的增删查改resful接口

    要自己事先创建好django项目,并创建好表,添加完记录

    路由:

    url(r'^publish/$', views.PublishView.as_view()),
    url(r'^publish/(?P<pk>d+)/$', views.PublishDetailView.as_view()),

    视图:

    
    
    from api import models
    from rest_framework import serializers
    from rest_framework.response import Response
    from rest_framework.views import APIView
    class PublishSerializers(serializers.ModelSerializer):
        class Meta:
            model=models.Publish
            fields='__all__'
    
    class PublishView(APIView):
      #查询出版社表中所有记录
        def get(self, request):
            publish_list = models.Publish.objects.all()
            bs = PublishSerializers(publish_list, many=True)
            # 序列化数据
    
            return Response(bs.data)   #返回的结果是列表中套字典
      
        def post(self, request):
            # 添加一条数据
            print(request.data)
    
            bs=PublishSerializers(data=request.data)
            if bs.is_valid():
                bs.save()  # 生成记录
                return Response(bs.data)   #返回的是添加成功记录的字典
            else:
    
                return Response(bs.errors)
    
    class PublishDetailView(APIView):
       #查询某一条数据
    def get(self,request,pk): publish_obj=models.Publish.objects.filter(pk=pk).first() bs=PublishSerializers(publish_obj,many=False) return Response(bs.data)
       #更新某一条数据
    def put(self,request,pk): publish_obj = models.Publish.objects.filter(pk=pk).first() bs=PublishSerializers(data=request.data,instance=publish_obj) if bs.is_valid(): bs.save() # update return Response(bs.data) else: return Response(bs.errors)
       #删除某一条数据
    def delete(self,request,pk): models.Publish.objects.filter(pk=pk).delete() return Response("")

    二、mixins类和generic类编写视图

    路由:

      url(r'^publishes$', views.Publish.as_view()),
      url(r'^publish/(?P<pk>d+)', views.PublishDetail.as_view()),

    视图:

    from api import models
    from rest_framework import serializers
    from rest_framework import mixins
    from rest_framework.generics import GenericAPIView
    class PublishSer(serializers.ModelSerializer):
        class Meta:
            model=models.Publish
            fields='__all__'
    class Publish(GenericAPIView,mixins.ListModelMixin,mixins.CreateModelMixin):
        queryset = models.Publish.objects.all()
        serializer_class = PublishSer
        def get(self,request):
            return self.list(request)   #在ListModelMixin下有一个list方法,返回的就是查询的结果:Response(serializer.data)
        def post(self,request):
            return  self.create(request)  #已经封装好了,帮我们做校验和序列化,返回的是添加成功的记录
    
    class PublishDetail(GenericAPIView,mixins.DestroyModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin):
    
        queryset = models.Publish.objects.all()
        serializer_class = PublishSer
        def get(self,request,*args, **kwargs):
            return self.retrieve(request,*args, **kwargs)
    
        def put(self,request,*args, **kwargs):
            return self.update(request,*args, **kwargs)
    
        def delete(self,request,*args, **kwargs):
            return self.destroy(request,*args, **kwargs)

    三、使用generic下ListCreateAPIView和RetrieveUpdateDestroyAPIView

    路由:

     url(r'^publishes$', views.Publish.as_view()),
     url(r'^publish/(?P<pk>d+)', views.PublishDetail.as_view()),

    视图:

    from api import models
    from rest_framework import mixins
    from rest_framework.generics import GenericAPIView
    from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
    from rest_framework import serializers
    class Publishser(serializers.ModelSerializer):
        class Meta:
            model=models.Publish
            fields='__all__'
    
    class Publish(ListCreateAPIView):
        queryset = models.Publish.objects.all()
        serializer_class = Publishser
    
    class PublishDetail(RetrieveUpdateDestroyAPIView):
        queryset = models.Publish.objects.all()
        serializer_class = Publishser

    四、使用ModelViewSet

    路由:

    url(r'^publish$',views.Publish.as_view({'get':'list','post':'create'})),
    url(r'^publish/(?P<pk>d+)', views.Publish.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

    视图:

    from rest_framework.viewsets import ModelViewSet
    from api import models
    from rest_framework import serializers
    class Publishser(serializers.ModelSerializer):
        class Meta:
            model=models.Publish
            fields='__all__'
    class Publish(ModelViewSet):
        queryset = models.Publish.objects.all()
        serializer_class = Publishser
  • 相关阅读:
    性能测试篇 :Jmeter HTTP代理服务器录制压力脚本
    使用JMeter录制手机App脚本
    WEB接口测试之Jmeter接口测试自动化 (二)(数据分离)
    【Python】Python读取文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 20: illegal multibyte sequence
    【Python】学习笔记九:面向对象拓展
    【Python】学习笔记七:函数
    【Python】学习笔记五:缩进与选择
    【Python】学习笔记三:序列
    【Python】学习笔记二:基本数据类型
    【Python】学习笔记一:Hello world
  • 原文地址:https://www.cnblogs.com/sui776265233/p/9794816.html
Copyright © 2011-2022 走看看