serializers 序列化组件

  可以实现很轻松的互相转换,最常用的组件 ,用量最大的组件

源码位置

rest_framework.serializers

源码中需要用到的 

   rest_framework.serializers

# 序列化工具类必须要继承此类class ModelSerializer(Serializer):

命令

  queryset/对象 -----> 序列化数据

bs=BookModelSerializers(queryset,many=True)    # 对queryset 对象序列化

bs=BookModelSerializers(obj)    # 对 对象序列化

  序列化数据 -----> queryset

bs=BookModelSerializers(data=request.data)    # 将序列化数据 转换成对象

  数据校验

bs.is_valid() 

  数据提交转换成记录

# 不指定对象.create() 方法
bs=BookModelSerializers(data=request.data)
bs.save()# 指定对象.updata() 方法
bs=BookModelSerializers(book,data=request.data)
bs.save()

实例

序列化模块工具类

  建立model字段的映射

  如果将所有的字段转换,转换一对多多对多字段的值会是关联的主键值,

  如果向显示关联的值就需要自定义,当 __all__ 和自定义字段都有的时候,优先使用自定义的 

  但是如果你使用了自定义的方法就需要重写 create方法。不然是报错无法正常的传输数据,因为默认的create是按照主键值来的。

序列化的定义

from rest_framework.response import Response
from rest_framework import serializers
class BookModelSerializers(serializers.ModelSerializer): # 类似于 modelform 一样的操作 class Meta:model = Bookfields = "__all__"# fields = ['publist','authors','title',] # 也可以单独取部分字段# 默认转换的时候普通字段没啥问题# title  = serializers.CharField  # 对于普通字段直接取即可    默认是 取 str(obj.title ) # 对于一对一,一对多字段会有错误的显示# publish= serializers.CharField()  # 会显示对象# publish_id = serializers.CharField()  # 会显示id ,如果没有非要要求显示特定字段,直接全部 __all__ 即可。# 自定义对一对多字段处理 ,注意啊:自定义字段可别写在 Meta 里面。是类下的变量字段。publish = serializers.CharField(source="publish.pk")  # 加 "source=" 取 str(obj.publish.pk )

  # 给字段的赋值一个 url 地址 ,即 Hyperlinked publish=serializers.HyperlinkedIdentityField(view_name="detailpublish",    # 反向解析的 别名 lookup_field="publish_id",    # 找出来当前的 id 值 lookup_url_kwarg="pk"        # 将lookup_field 的值赋值给 url 中
        )  # 如果使用了超链接,url 的格式如下, 必须需要有 反向名字,分组命名。  # url(r'publish/(?P<pk>\d+)', views.BookDetailView.as_view(),name="detailpublish"),

  # 如果使用了超链接,序列化示例的时候必须要加 context={"request":request}参数。  # bs=BookModelSerializers(book_list,many=True,context={'request': request}) 
# authors = serializers.SerializerMethodField(source='authors.all')  # 这样查多对多会查出来 queryset 对象# 自定义对多对多字段的处理authors = serializers.SerializerMethodField()  def get_authors(self,obj):    # 自定义多对多的处理,方法名有要求: get_字段名字temp=[]for obj in obj.authors.all():temp.append(obj.name)return temp # 如果自定义了字段的处理 ,需要重写 create 方法def create(self, validated_data):                 book=Book.objects.create(title=validated_data["title"],price=validated_data["price"],pub_date=validated_data["pub_date"],publish_id=validated_data["publish"]["pk"])book.authors.add(*validated_data["authors"])return book

序列化的使用

路由

url(r'book/', views.BookView.as_view()),
url(r'book/(\d+)', views.BookDetailView.as_view()),

视图

class BookView(APIView):def get(self,request):        # 对所有数据进行查看book_list=Book.objects.all()bs=BookModelSerializers(book_list,many=True,context={'request': request}) # 如果使用了了返回超链接就必须要加 context参数return Response(bs.data)def post(self,request):        # 对数据进行创建提交 # post请求的数据bs=BookModelSerializers(data=request.data)if bs.is_valid():print(bs.validated_data)bs.save()    # .create()方法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,context={'request': request})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()     # .updata()return Response(bs.data)else:return Response(bs.errors)def delete(self,request,id):    # 删除数据 Book.objects.filter(pk=id).delete()return Response()

转载于:https://www.cnblogs.com/shijieli/p/10273584.html

rest framework 序列化相关推荐

  1. Django REST framework 序列化与请求响应

    Django REST framework 序列化与请求响应 文章目录 Django REST framework 序列化与请求响应 @[toc] 1. INSTALLED_APPS注册rest_fr ...

  2. Django REST framework 序列化

    创建一个序列化类 使用序列化有四种方式 使用json模块,完全手写 使用django自带的序列化模块 1,# from django.core import serializers   2,# dat ...

  3. Django rest framework 序列化组件

    在笔者认为,在Django rest framework中最重要的是序列化组件,通过序列化我们可以将我们后台数据通过一定格式发送到我们的前端,然后通过一定的方法展示我们的数据. 那么我们就开始介绍我们 ...

  4. SAP Netweaver gateway framework序列化

    Created by Jerry Wang, last modified on Sep 09, 2015 serialization serial deserialization 输入是一个inter ...

  5. python-django rest framework框架之序列化

    序列化与反序列化:对象 -> 字符串 序列化字符串 -> 对象 反序列化 rest framework序列化+Form目的:解决QuerySet序列化问题功能:解析 和 过滤- Query ...

  6. 谈谈Django REST Framework(DRF)中的序列化器

    摘要 Django REST Framework(DRF)是一个强大的工具,可以帮助我们构建和处理RESTful API.其中的序列化器(Serializers)是其核心组件之一,它允许我们快速有效地 ...

  7. Django REST framework API 指南(12):验证器

    官方原文链接 本系列文章 github 地址 转载请注明出处 验证器 大多数情况下,您在 REST framework 中处理验证时,只需依赖默认的字段验证,或者在序列化类或字段类上编写明确的验证方法 ...

  8. 在django restful framework中设置django model的property

    众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...

  9. Django REST framework学习笔记

    文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...

最新文章

  1. Meta标签中的format-detection属性及含义
  2. IMX6ULL的GPIO操作方法
  3. linux rename命令使用示例
  4. solr7.4 centos7安装
  5. 找出无序数组中最小的k个数(top k问题)
  6. 库卡机器人是s7编程_「西门子1200PLC教程」19.S7-1200入门实例
  7. android 渐变圆形进度条_flutter好用的轮子推荐七-flutter圆形或线型进度条
  8. 一招上手!这样设计扛住亿级流量活动系统
  9. nginx 启动命令_Windows环境下将Nginx安装到服务中的方法
  10. 【测试】软件测试计划的编写
  11. ios实例开发精品文章推荐(8.14)
  12. HandBrake for Mac(专业的视频转码器) 最新版
  13. ai人工智能软件_您应该了解的5家创新AI软件公司
  14. python网络编程基础--http
  15. “实时SPC软件”的“实时”性指什么?一探究竟!
  16. 世界八大最顶尖的工业软件强国
  17. 不使用vue-cli 搭建vue项目
  18. SQL 查询 skip locked的使用
  19. 从命令行安装Deb文件的5种方法
  20. 白光led 计算机模拟,高显色指数LED白光的色度学模拟方法研究

热门文章

  1. mysql 5.6.23 源码包安装报错_CentOS6.5_64bit下编译安装MySQL-5.6.23
  2. TCP三次握手四次断开(图解)
  3. ios14的蓝牙弹窗_iOS14来了,总结一下给你带来了哪些最实用的功能
  4. 高频hf调制方式_收藏!AM的三种调制电路
  5. java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。
  6. python中分割字符串两种方法正则分组别名,如何在python中使用正则表达式模块将文本字符串分割成单词?...
  7. jumpserver 节点部署_Jumpserver 部署
  8. java nio.2群发_JAVA NIO TCP SOCKET 聊天群发
  9. java面试题二十 try catch
  10. c语言cobegin用法,用C语言实现P、V操作