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. Java多线程(十四):Timer

    Timer schedule(TimerTask task, Date time) 该方法在指定日期执行任务,如果是过去的时间,这个任务会立即被执行. 执行时间早于当前时间 示例代码,当前时间是201 ...

  2. Linux环境下进行分布式压测踩过的坑

    背景:公司为了满足大并发的情况,需要测试组配合,就需要分布式压测,这里我把我踩过坑都记录下来: 环境:Linux + jmeter-v.5.1.1;使用3台2核4G的压力机: Q1: Server f ...

  3. 为什么使用B+Tree索引?

    什么是索引? 索引是一种数据结构,具体表现在查找算法上. 索引目的 提高查询效率 [类比字典和借书] 如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字 ...

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

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

  5. Hbase入门(一)——初识Hbase

    本文将介绍大数据的知识和Hbase的基本概念,作为大数据体系中重要的一员,Hbase弥补了Hadoop只能离线批处理的不足,支持存储小文件,随机检索.而这种特性使得Hbase对于实时计算体系的事件存储 ...

  6. java教程系列二:Java JDK,JRE和JVM分别是什么?

    多情只有春庭月,犹为离人照落花. 概述 本章主要了解JDK,JRE和JVM之间的区别.JVM是如何工作的?什么是类加载器,解释器和JIT编译器.还有一些面试问题. Java程序执行过程 在深入了解Ja ...

  7. Selenium+python操作id为动态变化的frame(iframe)

    先定位到一组frame:ele = dr.find_elements_by_tag_name('iframe')此时获得一组frame 再通过index取需要切进去的frame并取到该frame的id ...

  8. Flume和Kafka完成实时数据的采集

    Flume和Kafka完成实时数据的采集 写在前面 Flume和Kafka在生产环境中,一般都是结合起来使用的.可以使用它们两者结合起来收集实时产生日志信息,这一点是很重要的.如果,你不了解flume ...

  9. Spring Cloud系列之Eureka服务治理

    写在前面 Spring Cloud Eureka是基于Netflix Eureka做的二次封装.主要包含两部分: 服务注册中心 eureka server 服务提供者 eureka client ps ...

  10. 初识PE文件结构

    前言 目前网络上有关PE文件结构说明的文章太多了,自己的这篇文章只是单纯的记录自己对PE文件结构的学习.理解和总结. 基础概念 PE(Portable Executable:可移植的执行体)是Win3 ...