django-rest-framework(八)(序列化)

序列化

功能

  • 功能一:序列化数据
  • 功能二:请求数据校验

序列化数据

前提概要

model.py

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值