zoukankan      html  css  js  c++  java
  • rest_framework中的serializers,Response,APIView

    URL:
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publi/', views.LoginView.as_view()),
        url(r'^publisher/', views.PublishView.as_view()),
        url(r'^books/$', views.BookView.as_view()),
        url(r'^books/(d+)/', views.BookDetailView.as_view()),
        url(r'^author/$', views.AuthorView.as_view()),
        url(r'^author/(d+)/', views.AuthorDetailView.as_view()),
    ]
    
    views:
    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    
    from .models import *
    from django.views import View
    import json
    from rest_framework import serializers
    from rest_framework.response import Response
    #为queyset做序列化
    class PublisherSerializers(serializers.Serializer):
        name = serializers.CharField()
        email = serializers.CharField()
    
    # class BookSerializers(serializers.Serializer):
    #     title = serializers.CharField()
    #     price = serializers.IntegerField()
    #     pub_date = serializers.DateField()
    #     publisher = serializers.CharField(source="publisher.email")
    #     # authors = serializers.CharField(source="authors.all") #多对多不好用
    #     authors =serializers.SerializerMethodField()
    #     def get_authors(self,obj):
    #         temp = []
    #         for obj in obj.authors.all():
    #             temp.append(obj.name)
    #             print(temp)
    #         return temp
    class BookModelSerializers(serializers.ModelSerializer):
        class Meta:
            model =Book
            fields = "__all__"
            #自定义显示字段 可以不不加就显示全部  用自定义的话post请求要重写create方法
        publisher = serializers.CharField(source="publisher.pk",read_only=True)
        # authors = serializers.CharField(source="authors.all") #多对多不好用
        # authors =serializers.SerializerMethodField()
        # def get_authors(self,obj):
        #     temp = []
        #     for obj in obj.authors.all():
        #         temp.append(obj.name)
        #         print(temp)
        #     return temp
    
        def create(self, validated_data):
            print("validated_data",validated_data)
            book = Book.objects.create(title=validated_data["title"],price=validated_data["price"],pub_date=validated_data["pub_date"],publisher_id=validated_data["publisher"]["pk"])
            book.authors.add(*validated_data["authors"])
            return book
    
    class AuthorModelSerializers(serializers.ModelSerializer):
        class Meta:
            model = Author
            fields = "__all__"
    
    from rest_framework.views import APIView
    class PublishView(APIView):
        def get(self,request):
            print(request.GET)
            return HttpResponse(123)
        def post(self,request):
            print(request.body)
            print(request.POST)
    
            return HttpResponse("789")
    class BookView(APIView):
        def get(self,request):
            book_list = Book.objects.all()
            # bs = BookSerializers(book_list,many=True)
            bs = BookModelSerializers(book_list, many=True)
            print(bs.data)
            return Response(bs.data)
        def post(self,request):
            bs = BookModelSerializers(data=request.data)
            if bs.is_valid():
                bs.save()
                return Response(bs.data)
            else:
                return Response(bs.errors)
    class BookDetailView(APIView):
        def get(self,request,id):
            book = Book.objects.filter(pk=id).first()
            bs = BookModelSerializers(book)
            return Response(bs.data)
        def put(self,request,id):
            book = Book.objects.filter(pk=id).first()
            bs = BookModelSerializers(book,data=request.data)
            if bs.is_valid():
                bs.save()
                return Response(bs.data)
            else:
                return Response(bs.errors)
        def delete(self,request,id):
            Book.objects.filter(pk=id).delete()
            return Response()
    class AuthorView(APIView):
        def get(self,request):
            author_list = Author.objects.all()
            authorseria = AuthorModelSerializers(author_list,many=True)
            return Response(authorseria.data)
        def post(self,request):
            authorseria = AuthorModelSerializers(data=request.data)
            if authorseria.is_valid():
                authorseria.save()
                return Response(authorseria.data)
            else:
                return Response(authorseria.errors)
    class AuthorDetailView(APIView):
        def get(self,request,pk):
            author_obj = Author.objects.filter(pk=pk).first()
            author_seria = AuthorModelSerializers(author_obj)
            return Response(author_seria.data)
        def put(self,request,pk):
            author_obj = Author.objects.filter(pk=pk).first()
            author_seria = AuthorModelSerializers(author_obj,data=request.data)
            if author_seria.is_valid():
                author_seria.save()
                return Response(author_seria.data)
            else:
                return Response(author_seria.errors)
    
        def delete(self,request,pk):
            Author.objects.filter(pk=pk).first().delete()
            return Response()
     
  • 相关阅读:
    【bzoj3211】花神游历各国
    四维偏序(K-D-Tree+rebuild)
    【bzoj3295】动态逆序对
    BZOJ3444: 最后的晚餐
    BZOJ3091: 城市旅行
    BestCoder Round #72
    BZOJ2733: [HNOI2012]永无乡
    wc2016总结
    BZOJ4381: [POI2015]Odwiedziny
    BZOJ4196: [Noi2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/chvv/p/9631794.html
Copyright © 2011-2022 走看看