博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rest-framework序列化
阅读量:7242 次
发布时间:2019-06-29

本文共 5901 字,大约阅读时间需要 19 分钟。

1.get请求的序列化 

1 # 1.导入模块 2 from rest_framework import serializers 3  4  5 from app01.models import Book 6 # 2.创建一个序列化类,字段类型不一定要跟model的字段一样 7  8 class BookSerializer(serializers.Serializer): 9     nid = serializers.CharField(max_length=32,read_only=True)10     title = serializers.CharField(max_length=32)11     price = serializers.DecimalField(max_digits=5,decimal_places=2)12     # 外键字段,显示__str__返回值13     publish = serializers.CharField(max_length=32)14     # 多对多字段需要自己手动获取数据,SerializerMethodField()15     authors = serializers.SerializerMethodField()16 17     def get_authors(self,book_obj):18         author_list = list()19 20         for author in book_obj.authors.all():21             author_list.append(author.name)22 23         return author_list
1 from rest_framework.views import APIView 2 from rest_framework.response import Response 3  4 from app01.app_serializers import BookSerializer 5 from app01.models import ( 6     Book, 7     Publish, 8     Author, 9 )10 11 class BookView(APIView):12 13     def get(self,request):14         # 3.获取queryset15         origin_data = Book.objects.all()16         # 4.开始序列化17         serialized_data = BookSerializer(origin_data,many=True)18         return Response(serialized_data.data)

 2.post请求(post请求需要自己手动写一个create的方法)

def create(self, validated_data):        authors = validated_data.pop("authors")        BookObj = Book.objects.create(**validated_data)        BookObj.authors.set(authors)        return BookObj
1     def post(self,request): 2  3         verified_data = BookSerializer(data=request.data) 4  5         if verified_data.is_valid(): 6  7             verified_data.save(authors = request.data['authors']) 8  9             return Response(verified_data.data)10         else:11             return Response(verified_data.errors)

 3.基于ModelSerializer创建的序列化类

1 class BookSerializer(serializers.ModelSerializer): 2     class Meta: 3         model = Book 4         fields = '__all__' 5         """ 6         [ 7             'title', 8             'price', 9             'publish',10             'authors',11             'publish_name',12             'publish_city',13             'authors'14         ]15         """16 17         extra_kwargs = {18             "publish":{
"write_only":True},19 "authors":{
"write_only":True}20 }21 22 publish_name = serializers.CharField(max_length=32,read_only=True,source='publish.name')23 publish_city = serializers.CharField(max_length=32,read_only=True,source='publish.city')24 25 authors_list = serializers.SerializerMethodField()26 27 def get_authors_list(self,book_obj):28 authors_list = list()29 30 for authors in book_obj.authors.all():31 authors_list.append(authors.name)##这个地方不能直接传authors32 33 return authors_list

  继承APIView的序列化

 

 

1 from rest_framework.views import APIView 2 from rest_framework.response import Response 3  4  path('books/', views.BookView.as_view()), 5  re_path('books/(\d+)/', views.BookFilterView.as_view()), 6  7 class BookView(APIView): 8  9     def get(self,request):10         book_list = Book.objects.all()11         new_book_list = BookSerializer(book_list,many=True)12 13         return Response(new_book_list.data)14 15     def post(self,request):16 17         verfield = BookSerializer(data=request.data,many=False)18 19         if verfield.is_valid():20             verfield.save()21             return Response(verfield.data)22         else:23             return Response(verfield.errors)24 25 class BookFilterView(APIView):26 27     def get(self,request,nid):28         origin_data = Book.objects.get(pk=nid)29         serialized_data = BookSerializer(origin_data,many=False)30 31         return Response(serialized_data.data)32 33     def put(self,request,nid):34         origin_data = Book.objects.get(pk=nid)35 36         verfield = BookSerializer(data=request.data,instance=origin_data,many=False)37 38         if verfield.is_valid():39             verfield.save()40             return Response(verfield.data)41         else:42             return Response(verfield.errors)43 44     def delete(self,request,nid):45         Book.objects.filter(pk=nid).delete()46 47         return Response()

  基于mixins的序列化

1 from rest_framework.response import Response 2 from rest_framework import generics 3 from rest_framework.mixins import ( 4     ListModelMixin, 5     RetrieveModelMixin, 6     CreateModelMixin, 7     UpdateModelMixin, 8     DestroyModelMixin, 9 )10   
  # path('books/', views.BookView.as_view()),   # re_path('books/(?P
\d+)/', views.BookFilterView.as_view()),
11 class BookView(ListModelMixin,CreateModelMixin,generics.GenericAPIView):12     queryset = Book.objects.all()13     serializer_class = BookSerializer14 15     def get(self,request):16         return self.list(self,request)17 18     def post(self,request):19         return self.list(self,request)20 21 class BookFilterView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,generics.GenericAPIView):22     queryset = Book.objects.all()23     serializer_class = BookSerializer24 25     def get(self,request,*args,**kwargs):26         return self.retrieve(request,*args,**kwargs)27 28     def put(self,request,*args,**kwargs):29         return self.update(request,*args,**kwargs)30 31     def delete(self,request,*args,**kwargs):32         return self.destroy(request,*args,**kwargs)

    基于ModelViewSet的序列化

1 path('books/', views.BookView.as_view({ 2         'get':'list', 3         "post":"create" 4     })), 5     re_path('books/(?P
\d+)/', views.BookView.as_view({ 6 "get":"retrieve", 7 "put":"update", 8 "delete":"destroy" 9 })),10 11 from rest_framework.viewsets import ModelViewSet12 13 class BookView(ModelViewSet):14 queryset = Book.objects.all()15 serializer_class = BookSerializer

 

转载于:https://www.cnblogs.com/qq849784670/p/10079829.html

你可能感兴趣的文章
如何谨慎选择企业外部培训师
查看>>
nagios常见错误排查
查看>>
我的友情链接
查看>>
一、Java内存数据库实践之深入浅出Redis - Redis介绍
查看>>
学习小笔记---大话PHP设计模式
查看>>
Linux 用户态与内核态的交互-netlink
查看>>
Gentoo安装(UEFI+Stub_kernel+Systemd+awesome)
查看>>
找出apache日志中访问量最大的IP
查看>>
高可用集群之heartbeat v2--基于CRM实现mysql高可用集群(未完)
查看>>
linux 6.4使用xmanager4的配置
查看>>
Servlet--表单、超链接、转发、重定向4种情况的路径
查看>>
tomcat解压版exe文件启动闪退问题
查看>>
Skype多人群组视频功能免费了
查看>>
云桌面远程协助
查看>>
CentOS(5.8/6.4)linux生产环境若干优化实战
查看>>
20145328 《信息安全系统设计基础》第5周学习总结
查看>>
10.使用子查询 ---SQL
查看>>
Linux下chkconfig命令详解
查看>>
坦克大战---可能带BUG
查看>>
excel表数据分列
查看>>