序列化
功能:
- 功能一:序列化数据
- 功能二:请求数据校验
序列化数据
前提概要
from django.db import models
class UserGroup(models.Model):
title = models.CharField(max_length=32)
class Role(models.Model):
title = models.CharField(max_length=32)
class UserInfo(models.Model):
user_type_choices = ((1, '普通用户'), (2, 'VIP'), (3, 'SVIP'))
user_type = models.IntegerField(choices=user_type_choices)
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=64)
group = models.ForeignKey('UserGroup', on_delete=models.CASCADE)
roles = models.ManyToManyField('Role')
class UserToken(models.Model):
user = models.OneToOneField(to='UserInfo', on_delete=models.CASCADE)
token = models.CharField(max_length=64)
基本使用1:继承Serializer类
class UserinfoSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
class UserinfoView(APIView):
def get(self, request, *args, **kwargs):
user =UserInfo.objects.all()
ser = UserinfoSerializer(instance=user, many=True)
set = json.dumps(ser.data, ensure_ascii=False)
return HttpResponse(set)
source的用法
当遇到source字段时,会将source字段中的内容split("."),然后依次调用
获取用户类型的ID、内容、所属组
class UserinfoSerializer(serializers.Serializer):
# 获取数据库中用户类型ID
# 使用source的原理是实现row.user_type即是获取用户的类型ID
usertype = serializers.CharField(source='user_type')
# 获取用户类型内容
# 使用source的原理是实现row.get_user_type_display()即调用了该行元素的方法,获取到内容
usertype_content = serializers.CharField(source='get_user_type_display')
# 获取用户所属组
group = serializers.CharField(source='group.title')
username = serializers.CharField()
password = serializers.CharField()
结果
[
{
"usertype": "1",
"usertype_content": "普通用户",
"group": "1组",
"username