serializer.py中设置序列化器

from rest_framework import serializers
from myapp.models import Poemclass PoemSerializer(serializers.Serializer):id = serializers.IntegerField(read_only=True)title = serializers.CharField(max_length=20)content = serializers.CharField(max_length=100)price = serializers.DecimalField(max_digits=8,decimal_places=2,)def update(self, instance, validated_data):instance.title = validated_data.get('title')instance.content = validated_data.get('content')instance.price = validated_data.get('price')instance.save()return instancedef create(self, validated_data):poem = Poem.objects.create(**validated_data)return poem

Poem 表

class Poem(models.Model):
title = models.CharField(max_length=20,null=False,
)
content = models.CharField(max_length=100,null=True,
)
price = models.DecimalField(max_digits=8,decimal_places=2,
)

也就是说继承(serializers.Serializer)设计序列化器时序列化器中字段名要和model类中字段名一致

views视图函数 CBV

from django.http import JsonResponse, QueryDict
from django.shortcuts import renderfrom django.views import View
from .serializer import *class PoemOneApi(View):def get(self,req):params = req.GETid = int(params.get('id')) if params.get('id') else 0if id:poem = Poem.objects.get(pk=id)serializer = PoemSerializer(poem)return JsonResponse(serializer.data)poems = Poem.objects.all()serializer = PoemSerializer(poems,many=True)# 有多个序列化数据。要加上safe=Falsereturn JsonResponse(serializer.data,safe=False)def post(self,req):params = req.POSTserializer = PoemSerializer(data=params)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data)def put(self,req):params = QueryDict(req.body)id = params.get('id')poem = Poem.objects.get(pk=id)serializer = PoemSerializer(instance=poem,data=params)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data)def delete(self,req):params = QueryDict(req.body)id = params.get('id')poem = Poem.objects.get(pk=id)serializer = PoemSerializer(poem)poem.delete()return JsonResponse(serializer.data)

继承(serializers.Serializer)时 一定要重写 update 与 create 方法
在serializer.save()时会根据instance 有无 调用 update 或 create 方法
instance可认为是符合序列化结构的数据。
如果没有instance会调用 create 也就是添加Poem表数据
如果有instance 与data 则会更新数据

因为Serializer 继承 BaseSerializer类

def update(self, instance, validated_data):
raise NotImplementedError(’update() must be implemented.’)

def create(self, validated_data):
raise NotImplementedError(’create() must be implemented.’)

不重写直接调用则会raise。而期中save方法对create 与 update
有调用

if self.instance is not None:self.instance = self.update(self.instance, validated_data)assert self.instance is not None, ('`update()` did not return an object instance.')
else:self.instance = self.create(validated_data)assert self.instance is not None, ('`create()` did not return an object instance.')return self.instance

如果觉得自定义序列化器的字段十分麻烦。可以继承serializers.ModelSerializer
只要内部定义Meta类指定model 模型 与 模型字段名即可

class PoemNewSerializer(serializers.ModelSerializer):class Meta:model = Poemfields = ['id','title','content','price']

ModelSerializer对models常用字段进行了映射。并且重写了 updata 与create方法使得我们可以直接调用save()方法而不用重写

serializer_field_mapping = {models.AutoField: IntegerField,models.BigIntegerField: IntegerField,models.BooleanField: BooleanField,models.CharField: CharField,models.CommaSeparatedIntegerField: CharField,models.DateField: DateField,models.DateTimeField: DateTimeField,models.DecimalField: DecimalField,models.EmailField: EmailField,models.Field: ModelField,models.FileField: FileField,models.FloatField: FloatField,models.ImageField: ImageField,models.IntegerField: IntegerField,models.NullBooleanField: NullBooleanField,models.PositiveIntegerField: IntegerField,models.PositiveSmallIntegerField: IntegerField,models.SlugField: SlugField,models.SmallIntegerField: IntegerField,models.TextField: CharField,models.TimeField: TimeField,models.URLField: URLField,models.GenericIPAddressField: IPAddressField,models.FilePathField: FilePathField,
}

视图函数中使用同继承Serializer一致

序列化器serializers的使用相关推荐

  1. 客户端序列码生成_Django REST Framework教程(2): 序列化器介绍及开发基于函数视图的API...

    在上篇文章中,我们已经介绍了为什么要学习DRF,什么是序列化以及什么是符合RESTful规范的Web API.在本篇文章中我们将以博客为例,使用DRF提供的序列化器(Serializers类)开发两个 ...

  2. 模型类序列化器ModelSerializer

    如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...

  3. 定义Serializer序列化器

    序列化器的作用: 进行数据的校验 对数据对象进行转换 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_fra ...

  4. 关于django—模型序列化器类详细内容

    一.定义模型序列化器类 1.继承serializers.ModelSerializer类或其子类 2.需要在Meta内部类中指定model.fields类属性参数 3.model指定模型类(需要生成序 ...

  5. DRF框架—序列化器中的字段校验规则

    一.怎么校验创建的项目名是否是唯一的,当项目名name字段不唯一,怎么设置提示信息? 方法:导入UniqueValidator from rest_framework.validators impor ...

  6. spring序列化_使用@JsonIdentityInfo的Spring自定义序列化器

    spring序列化 介绍 Spring中从JSON到JSON的序列化/反序列化已广泛用于基于Spring的现代应用程序中. 它基于杰克逊. Jackson可以轻松地将任何POJO序列化为JSON,反之 ...

  7. 使用@JsonIdentityInfo的Spring自定义序列化器

    介绍 Spring中从JSON到JSON的序列化/反序列化已广泛用于基于Spring的现代应用程序中. 它基于杰克逊. Jackson可以轻松地将任何POJO序列化为JSON,反之亦然. 这段代码写得 ...

  8. django序列化器嵌套_Django Rest Framework中用于OneToOne字段的序列化程序中的嵌套关​​系

    django序列化器嵌套 The Django Rest Framework (DRF) is one of the effectively written frameworks around Dja ...

  9. DRF批量修改序列化器使用

    需求:用户将选择型问答提交,前端返回所有问答数据,将问答数据批量修改入到数据库中 model  class QuestionnairQA(BaseModel):question_choices = ( ...

最新文章

  1. Best jQuery Plugins of 2010
  2. python-os模块
  3. OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线
  4. vnpy官网说明文档网址
  5. java 编译 忽略错误_Maven在Java8下如何忽略Javadoc的编译错误详解
  6. [转]mpvue中的小程序调用系统自带查看图片的功能
  7. 选择计算机系统的依据是什么,大学计算机基础 试题
  8. manchi翻译中文 mi_求这一段意大利文歌词中文翻译(Mi Manchi)
  9. js前端——滑稽官网的亮瞎眼系列滑稽大法
  10. c语言中整形精确到后面几位,C语言中普通整型变数在记忆体中占几个位元组
  11. 独家|对决金融云:备案将至,谁得先手
  12. oracle:如何构造一个随机姓名出来?
  13. 阵列卡PERCH330_H730配置手册
  14. 【MM32F5270开发板试用】+ TFTLCD IO口方式驱动
  15. 1.7 COMS边沿触发器
  16. Kafka安全认证(Java)
  17. 离线地图开发 支持 局域网内二次开
  18. 清华大学计算机系学几年,清华大学16位学霸简历吓坏网友
  19. 关于lock_guard
  20. 高德地图交通态势爬取

热门文章

  1. 高等数学(第七版)同济大学 总习题九(后10题) 个人解答
  2. 小米 红米Note(联通3G版)解BL锁教程 申请BootLoader解锁教程
  3. 疫情数据分析平台(五):中国疫情地图绘制
  4. 配置D3D8到vs2012项目中遇到的问题和解决过程
  5. Redis AKF CAP 集群知识
  6. 4章 RxJava基本响应类型
  7. python时间复杂度和空间复杂度是指,时间复杂度与空间复杂度
  8. vscode在html看到图片的插件_利用花瓣插件 下载高清大图
  9. Linux权限“suid”与“guid”设置
  10. 直播预告 | NeurIPS 专场六 青年科学家专场