zoukankan      html  css  js  c++  java
  • rest_framake之视图

    开始,先放大招

    一  最原始的写法

    前戏之序列化

    class AuthorSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.AuthorDatail
            fields = '__all__'
    
    
    
    class BookSerializer(serializers.ModelSerializer):
        # 必须写一个内部类,名字叫Meta
        class Meta:
            model = models.Book
    
            fields =  '__all__'
    
    
    
    class PublishSerializers(serializers.ModelSerializer):
        class Meta:
            model = models.Publish
            fields = '__all__'

    views

    class PublishView(APIView):
    
        def get(self, request):
            publish_list = Publish.objects.all()
            bs = PublishSerializers(publish_list, many=True)
    
            return JsonResponse(bs.data,safe=False)
    
        def post(self, request):
            # 添加一条数据
            print(request.data)
    
            bs = PublishSerializers(data=request.data)
            if bs.is_valid():
                bs.save()  # 生成记录
                return JsonResponse(bs.data,safe=False)
            else:
    
                return JsonResponse(bs.errors,safe=False)
    
    
    class PublishDetailView(APIView):
        def get(self, request, pk):
            publish_obj = Publish.objects.filter(pk=pk).first()
            bs = PublishSerializers(publish_obj, many=False)
            return JsonResponse(bs.data,safe=False)
    
        def put(self, request, pk):
            publish_obj = Publish.objects.filter(pk=pk).first()
    
            bs = PublishSerializers(data=request.data, instance=publish_obj)
            if bs.is_valid():
                bs.save()  # update
                return JsonResponse(bs.data)
            else:
                return JsonResponse(bs.errors)
    
        def delete(self, request, pk):
            Publish.objects.filter(pk=pk).delete()
    
            return JsonResponse("")

    路由

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

    二  小试牛刀

    views

    class List:
        def list(self,request):
            publish_list = Publish.objects.all()
            bs = PublishSerializers(publish_list, many=True)
    
            return JsonResponse(bs.data,safe=False)
    class Create:
        def create(self,request):
            bs = PublishSerializers(data=request.data)
            if bs.is_valid():
                bs.save()
                return JsonResponse(bs.data,safe=False)
            else:
                return JsonResponse(bs.errors,safe=False)
    
    class PublishView(APIView,List,Create):
        def get(self,request):
            return self.list(request)
    
        def create(self,request):
            return self.create(request)

    url

    同上

    三  这次是初生牛犊之牛刀

    views

    class List:
        def list(self,request):
            querryset = self.querryset
            bs = self.serializers(querryset,many=True)
            return JsonResponse(bs.data, safe=False)
    
    class Create:
    
        def create(self,request):
            print(request.data)
            bs =self.serializers(data=request.data)
            if bs.is_valid():
                bs.save()  # 生成记录
                return JsonResponse(bs.data,safe=False)
            else:
    
                return JsonResponse(bs.errors,safe=False)
    
    
    class PublishView(APIView,List,Create):
        querryset = Publish.objects.all()
        serializers = PublishSerializers
        def get(self,request):
            return self.list(request)
        def post(self,request):
            return self.create(request)
    
    
    class BookView(APIView,List,Create):
        querryset = Book.objects.all()
        serializers = BookSerializer
        def get(self,request):
            return self.list(request)
        def post(self,request):
            return self.create(request)

    url

    同上

    四  牛刀

    views

    
    
    #drf提供的封装的类

    from
    rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin from rest_framework.generics import GenericAPIView class PublishView(GenericAPIView,ListModelMixin, CreateModelMixin): queryset = Publish.objects.all() serializer_class = PublishSerializers def list(self,request): return self.list(request) def create(self,request): return self.create(request) class AuthorDetail(GenericAPIView,ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin,DestroyModelMixin): queryset = AuthorDatail.objects.all() serializer_class = AuthorSerializer def get(self,request,pk): return self.retrieve(request,pk) def post(self,request,pk): return self.create(request,pk) def put(self,request,pk): return self.update(request,pk) def delete(self,request,pk): return self.delete(request,pk)

    url

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

    五  牛!牛!刀!

    views

    from rest_framework.generics import ListCreateAPIView, ListAPIView, RetrieveUpdateDestroyAPIView
    
    
    class PublishView(ListCreateAPIView):
        queryset = Publish.objects.all()
        serializer_class = PublishSerializers
    
    class AuthorDetailView(RetrieveUpdateDestroyAPIView):
        queryset = AuthorDatail.objects.all()
        serializer_class = AuthorSerializer

    url

    同上

    六  牛!牛!牛!刀

    views

    from rest_framework.viewsets import ModelViewSet
    
    
    class PublishView(ModelViewSet):
        queryset = Publish.objects.all()
        serializer_class = PublishSerializers

    url

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

    七  究极版之牛都秃顶了

    views

    同上

    url

    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
    from rest_framework import routers
    # 生成一个router对象
    router=routers.DefaultRouter()
    # 需要传两个参数,第一个参数就是匹配的路径,第二个参数,是视图类
    router.register('publish',views.PublishView)
    urlpatterns = [
        url('', include(router.urls)),
    ]
  • 相关阅读:
    C#和C实现通过CRC-16 (Modbus)获取CRC值并校验数据(代码)
    c#串口通信类代码可以直接调用
    栈的理解以及如何计算程序所需栈的大小并在IAR中设置栈
    Heap堆的理解以及在IAR中如何设置堆的大小
    ARM Cortex-M0权威指南高清中文版pdf免费分享下载
    如何重新划分linux分区大小
    Using Internal EEPROM of PIC Microcontroller
    树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA
    './mysql-bin.index' not found (Errcode: 13) 的解决方法
    移植mysql到嵌入式ARM平台
  • 原文地址:https://www.cnblogs.com/zhaijihai/p/10133690.html
Copyright © 2011-2022 走看看