rest--serializer思想

1,list时:

1,创建ModelSerizler,
2,如果model字段要进行进一步运算或者处理,那么serializerMethod()进行进一步的处理。

2,create

1,创建serializer
2,如果是创建时,可以在字段内部进行字段信息的判断,并且写好错误信息
  比如:serializers.CharField(max_length=200)
3,创建时,直接在serializer下面写create方法,如果有问题,也可以在内部直接raise错误
a,期间可以通过钩子函数处理每个字段信息
def validate_title(self, value):
  if 'django' not in value.lower():
      raise serializers.ValidationError("Blog post is not about Django")
    return value

b,如果要处理全部的字段信息
def validate(self, data):
  if data['start'] > data['finish']:
    raise serializers.ValidationError("finish must occur after start")
  return data  

c,直接创建
def create(self, validated_data): profile_data
= validated_data.pop('profile') user = User.objects.create(**validated_data) Profile.objects.create(user=user, **profile_data) return user

d,在list下,检测是否成功
serializer = CommentSerializer(comment, data=data) 
serializer.is_valid() # True 
serializer.validated_data # {'content': 'foo bar', 'email': '[email protected]', 'created': datetime.datetime(2012, 08, 22, 16, 20, 09, 822243)} comment = serializer.save()
comment = serializer.save()

e,如果你想在save中再加东西
serializer.save(owner=request.user)

f,如果你不想创建对象时,想发邮件,就重写save方法
def save(self): 
  email = self.validated_data['email'] 
  message = self.validated_data['message'] 
  send_email(from=email, message=message)

g,如果对一个字段限制信息单独定制,或者公用
def multiple_of_ten(value):
  if value % 10 != 0:
    raise serializers.ValidationError('Not a multiple of ten')
class GameRecord(serializers.Serializer):
  score = IntegerField(validators=[multiple_of_ten])

h,嵌套序列化,当然嵌套查询,可以优化
class UserSerializer(serializers.Serializer):
  email = serializers.EmailField()
  username = serializers.CharField(max_length=100)
class CommentSerializer(serializers.Serializer):
  user = UserSerializer()
  content = serializers.CharField(max_length=200)
  created = serializers.DateTimeField()
如果嵌套的那个地方可能是空 要指定参数required
user = UserSerializer(required=False)

4,update和create差不多

猜你喜欢

转载自www.cnblogs.com/52forjie/p/9706022.html