Django restframework中 Serializer 序列化方法详细介绍

以前在写django 的时候,从后端拿到数据返回给前端,每个字段都要单独进行定义,有了Serializer方法,我们可以节省代码量。
首先,编写今天的models 表,并自己进行url 配置,详细参照前三篇教程。

from django.db import models


class UserGroup(models.Model):
	title = models.CharField(max_length=32)


class UserInfo(models.Model):
	user_type_choice = (
		(1, '普通用户'),
		(2, 'VIP'),
		(3, 'SVIP')
	)
	user_type = models.IntegerField(choices=user_type_choice)
	username = models.CharField(max_length=32, unique=True)
	password = models.CharField(max_length=64)
	roles = models.ManyToManyField("Role")
	group = models.ForeignKey(UserGroup, on_delete=models.DO_NOTHING)


class UserToken(models.Model):
	user = models.OneToOneField(to='UserInfo', on_delete=models.CASCADE)
	token = models.CharField(max_length=32)


class Role(models.Model):
	title = models.CharField(max_length=32)

1. 返回的数据的几种方式

首先,看一下以前我们是怎么给前端传递数据的
Django restframework中 Serializer 序列化方法详细介绍_第1张图片
第二种方法, 使用Serializer 方法简单的对QuerySet进行封装
Django restframework中 Serializer 序列化方法详细介绍_第2张图片
只返回一个结果:
Django restframework中 Serializer 序列化方法详细介绍_第3张图片

2. Serializer 的用法

Django restframework中 Serializer 序列化方法详细介绍_第4张图片
user_type 刚才设置的是可选项,加入到展示字段之后,发现并不能显示出来。
Django restframework中 Serializer 序列化方法详细介绍_第5张图片
给字段更改名字。
Django restframework中 Serializer 序列化方法详细介绍_第6张图片
根据字段的选择,显示选择对应的数据
Django restframework中 Serializer 序列化方法详细介绍_第7张图片
显示数据表外键对应的字段信息
Django restframework中 Serializer 序列化方法详细介绍_第8张图片
上面的字段都是一一对应或者一对多的关系,假如是多对多,即ManyToMany ,则不能继续使用source 的方法,而是得换一个方法。我们在前面设置的时候,设置的用户表跟角色表是多对多的关系,我们可以用此来进行测试。
Django restframework中 Serializer 序列化方法详细介绍_第9张图片
在我们自定义之后,可以显示出我们自己定义的类型信息,但是该字段是写死的,而我们在设置表的时候,每个用户可以对应多个角色,应该是不同的。
Django restframework中 Serializer 序列化方法详细介绍_第10张图片

现在我们可以进行总结:假如我们要对某个字段进行传递给前端,我们可以首先进行序列化,序列化的类要继承serializer 方法,编写要展示的字段,使用source 找到想要的字段。可以用get_display 方法实现choice选择的展示,也可以自己定义方法进行展示。

3. Serializer 其他用法

上面我们要将展示的字段一一列举出来,我们可以有更简单的用法,这次继承的类不一样
Django restframework中 Serializer 序列化方法详细介绍_第11张图片
我们也可以只让显示我们需要的字段信息,同样的,根据上面的用法,我们也可以自定义多对多的显示信息。

Django restframework中 Serializer 序列化方法详细介绍_第12张图片
Django restframework中 Serializer 序列化方法详细介绍_第13张图片

4. 总结:

写类的序列化的时候,可以有两种继承方式
  1. serializers.Serializer : 要将每个展示的字段都要写出来
  2. serializers.ModelSerializer: 通过model 和 fields 可以将所有的字段展示,也可展示自定义的

字段定义信息:

  1. 可以使用source 进行指定
  2. xxx = serializers.SerializerMethodField() 可以自定义,通过函数get_xxx 进行自定义

今天就暂时写到这里,明天再写最后一节。

你可能感兴趣的:(Django)