0905自我总结

drf框架serializers中ModelSerializer类

基于seriallizer类进行简化

https://www.cnblogs.com/pythonywy/p/11455508.html

一.简单的使用

导入from rest_framework import serializers

与基础serializer类后续使用的作用相似

class 自定义名称(serializers.ModelSerializer):
class Meta:
model=对应的模型
fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2')
#fields='__all__' 为所有字段
# exclude = ('id', 'is_delete') # 刨除某些字段
# depth = 1 # 跨表自动深度(展示外键表的所有字段)

注意点

  • 其中fieldsexclude不能共存
  • depth不能控制显示字段,与外键相关的表会全部显示出来

二.利用模型类中的方法进行指导字典的生成

例如有两个模型AB,他们的c字段有外键关联

modles.py

class B(models.Model):
name = models.CharField(max_length=60) class A(models.Model):
uid = models.ForeignKey(B,'id') @property #下面调用函数名的时候自动运行函数
def b_name(self): #这里的self是A类
return self.uid.name class AModelSerializer(serializers.ModelSerializer):
class Meta:
model=A #这里导入A会把A里面的所有名称空间存在的都进行导入
fields=('b_name')

三.另外总方法完成深度查询

class B(models.Model):
name = models.CharField(max_length=60) class A(models.Model):
uid = models.ForeignKey(B,'id') #方法一
class BModelSerializer(serializers.ModelSerializer):
class Meta:
model=B
fields=('b_name') class BModelSerializer(serializers.ModelSerializer):
b_name = BModelSerializer()
class Meta:
model=A #这里导入A会把A里面的所有名称空间存在的都进行导入
fields=('b_name') #方法二
#通过自定义字段
class BModelSerializer(serializers.ModelSerializer):
b_name = serializers.SerializerMethodField()
def get_b_name(self, obj: models.A):
return A.uid.name
class Meta:
model=A #这里导入A会把A里面的所有名称空间存在的都进行导入
fields=('b_name')

四.ModelSerializer对于反序列话约数条件设置及只读只写属性设置

反序列话约数条件设置

class 自定义名称(serializers.ModelSerializer):
class Meta:
model=对应的模型
fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2')
extra_kwargs ={
参与序列化和反序列的字段1:{
'required': True, #必须填写的字段
'min_length': 3,
#.....约数条件
'error_messages': {
'min_length': '太短' }
}
}

只读只写属性设置

class 自定义名称(serializers.ModelSerializer):
class Meta:
model=对应的模型
fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2')
extra_kwargs ={
参与序列化和反序列的字段1:{
'write_only': True #只写
}
参与序列化和反序列的字段2:{
'read_only': True #只读
}
}

五.视图层使用

数据没有修改

class BookAPIView(APIView):
def get(self, request, *args, **kwargs):
book_query = models.Book.objects.all() #假设查我们定义的书的这个模型
book_ser = serializers.BookModelSerializer(book_query, many=True)
return Response(0, 'ok', results=book_ser.data) #用drf框架自带的Response

有添加修改相关操作

class BookAPIView(APIView):
def post(self, request, *args, **kwargs):
pk=kwargs.get('pk')
book_obj = models.Book.objects.get('pk')
book_ser = serializers.BookModelSerializer(instance=book_obj,data=request.data) #根据传进来的数据机芯判断
#如果多个数据为book_set = serializers.BookModelSerializer(data=request.data many=true)
if book_ser.is_valid(): #这里是我们设置的ModelSerializer的约数条件看是否能通过
book_ser.save() #这里他会自动进行判断是create方法还是update方法
return Response(0, 'ok',results=book_ser.data)
else:
return Response(1, '添加失败', results=book_ser.errors)#用drf框架自带的Response
  • 注意点:save源码中我们可以看到instance有值调用updata方法,没有值调用create方法.所以修改必须加instance参数,传的参数基本上是修改之前的对象

有关删除

class BookAPIView(APIView):
def post(self, request, *args, **kwargs):
book_ser = serializers.BookModelSerializer(data=request.data) #根据传进来的数据机芯判断
#如果多个数据为book_set = serializers.BookModelSerializer(data=request.data many=true)
if book_ser.is_valid(): #这里是我们设置的ModelSerializer的约数条件看是否能通过
book_ser.deleter() #这里他会自动进行判断是create方法还是update方法
return Response(0, 'ok',results=book_ser.data)
else:
return Response(1, '删除失败', results=book_ser.errors)#用drf框架自带的Response

drf框架serializers中ModelSerializer类简化序列化和反序列化操作的更多相关文章

  1. 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。

    在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...

  2. JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  3. .Net类的序列化和反序列化 - 进阶者系列 - 学习者系列文章

    今天看了下以前的一个工具的代码,其中涉及到.NET类的序列化和反序列化问题,所以就写一下. 这里说一下.NET类序列化的好处..NET类在序列化之前只是一个相对狭义的类.通过序列化,能够更好的保存该类 ...

  4. C# 类的序列化和反序列化

    序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创 ...

  5. 初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用 ...

  6. C#中json字符串的序列化和反序列化

    改文章转自:https://www.cnblogs.com/shang201215019/p/7907655.html 什么是 Json ?        Json[javascript对象表示方法] ...

  7. C#中的Json的序列化和反序列化

    Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中.我们在下面实例讲解如何进行Jso ...

  8. 基于.net core封装的xml序列化,反序列化操作

    需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...

  9. java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)

    本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...

随机推荐

  1. zookeeper学习(一)_简介

    上篇文章 我们已经安装上了zookeeper,也简单的体验了一把,但是如果让你给别人介绍下zookeeper,可能也是说不出来.本篇文章就参考了网上各位优秀博主的文章,整理出自己更能理解的内容 优秀博 ...

  2. PHPCon 2019 第七届 PHP 开发者大会总结

    往届回顾-2018:PHPCon 2018链接: https://pan.baidu.com/s/17nfrfqk9K4vwKPAsjBVW7A——提取码:rjbr 随着PHP7的诞生,兼顾了高性能和 ...

  3. C++消息框架-基于sigslot

    目录 一.简介 二.消息 三.发送者 1.发送消息函数 2.新增一个接收者函数 3.移除一个接收者函数 四.接收者 五.功能测试 1.消息接收类 2.测试代码 3.测试结果 六.源码 一.简介 上一篇 ...

  4. 给Xshell增加快速命令集

    一.显示快速命令栏 二.配置快速命令集 在工具中找到快速命令集 添加快速命令集 三.使用快速命令集

  5. PHP5.6版本在Windows上安装redis扩展

    PHP使用redis扩展 一.php安装redis扩展   1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本       2.根据PHP版本号,编译器版本号和CPU架构, 选择 ...

  6. 【linux】【Zookeeper】Centos7安装Zookeeper-3.5.5

    一 .下载zookeeper wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5 ...

  7. 用.NET做动态域名解析

    用.NET做动态域名解析 动态域名解析,或DNSR,通常用于解析IP地址经常变化的域名.电信网络提供了公网IP,给广大程序员远程办公.内容分享等方面带来了极大的便利.但公网IP是动态的,它会经常变化, ...

  8. CDH集群的配置优化须知

           通过改善IFile阅读器的性能 IFile Reader,进而可改善随机处理程序并减少储备空间,达到MapReduce的配置最佳实践要求.而MapReduce shuffle的处理程序和 ...

  9. gcc编译命令总结

    一步到位编译:gcc hello.c -o hello 预处理 -E (.i) 编译 -S (.s) 汇编-c (.o) 连接-o 预处理 gcc -E hello.c -o hello.i -E:仅 ...

  10. Spring MVC-从零开始-@ResponseBody(未完待续)

    Spring MVC-从零开始-@ResponseBody(未完待续)