首先先来一段序列化的代码
from rest_framework import serializers
from idcs.models import Idc
class UserSerializer(serializers.Serializer):
"""
User 序列化类
"""
password = serializers.CharField(required=True,max_length=128)
username = serializers.CharField(required=True,max_length=150)
email = serializers.CharField(required=True,max_length=254)
然后我们进入到django shell中测试使用下serializers
In [1]: from idcs.serializers import UserSerializer
In [2]: from django.contrib.auth.models import User
data1 = User.objects.get(pk=1) #获取一条主键为1的数据
data2 = UserSerializer(data1) #将数据data1使用UserSerializer进行序列化
In [10]: data2 #查看序列化后的属性
Out[10]: #默认展示的是序列化中属性的定义,不直接展示数据
UserSerializer(<User: ljp1>):
password = CharField(max_length=128, required=True)
username = CharField(max_length=150, required=True)
email = CharField(max_length=254, required=True)
In [11]: data2.data #查看序列化后的数据
Out[11]: {'password': 'pbkdf2_sha256$36000$OnVys4VQEVzx$7PIyapu3vpN/qdBcZ36UdOAMOW9yjD30rkzZbyr5q7Y=', 'username': 'ljp1', 'email': 'ljp1@reboot.com'}
通过以上的方式,我们可以使用serializers实现模型数据的序列化操作,但是如果要将该数据传递给前段还需要进行转JSON,我们看下如何转换
# 第一想法,我们肯定是直接通过JSON的模块直接将这个数据转换了
In [13]: json.dumps(data2.data)
Out[13]: '{"password": "pbkdf2_sha256$36000$OnVys4VQEVzx$7PIyapu3vpN/qdBcZ36UdOAMOW9yjD30rkzZbyr5q7Y=", "username": "ljp1", "email": "ljp1@reboot.com"}'
# 不过这样的转换方式,有很多异常没有被处理,而且序列化后的类型也不是标准的JSON,我们看下
In [15]: type(data2.data)
Out[15]: rest_framework.utils.serializer_helpers.ReturnDict
#可以看到他是一个 rest_framework的字典类型
以上的转换是有异常的,那么我们如何正确的转换呢,rest_framework提供了方法,我们看下
In [16]: from rest_framework.renderers import JSONRenderer #导入序列化数据转json数据的模块
In [17]: jr = JSONRenderer() #实例化该类
In [19]: jr.render(data2.data) #通过该类的render方法,转换序列化后的数据
Out[19]: b'{"password":"pbkdf2_sha256$36000$OnVys4VQEVzx$7PIyapu3vpN/qdBcZ36UdOAMOW9yjD30rkzZbyr5q7Y=","username":"ljp1","email":"ljp1@reboot.com"}'
# 转换后的数据可以直接通过HttpResponse传递给前段使用