声明序列化器
先声明对象
from datetime import datetime
class Comment(object):
def __init__(self, email, content, created=None):
self.email = email
self.content = content
self.created = created or datetime.now()
comment = Comment(email='leila@example.com', content='foo bar')
再声明一个序列化器
from rest_framework import serializers
class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
序列化
序列化就是将Model对象序列化成字符串用户传输
serializer = CommentSerializer(comment) # comment是一个Comment类的实例
serializer.data
# {'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'}
反序列化
就是将字符串反序列化成Model对象用于使用
# data一般是request.data这样的数据
serializer = CommentSerializer(data=data)
serializer.is_valid()
# True
serializer.validated_data #一个字典,更准确地说,是一个OrderedDict,即排好序的字典
serializer.validated_data可以用于创建对象,这一般再serializer的create函数里实现
class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
def create(self, validated_data):
return Comment(**validated_data)
def update(self, instance, validated_data):
instance.email = validated_data.get('email', instance.email)
instance.content = validated_data.get('content', instance.content)
instance.created = validated_data.get('created', instance.created)
return instance