zoukankan      html  css  js  c++  java
  • 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': 'leila@example.com', '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差不多

  • 相关阅读:
    用OBS studio(Open Broadcaster Software)录屏
    强力粘胶,粘金属
    Win10下不用虚拟机安装ubuntu, 及bash shell打开教程
    latex 的工具集
    python game游戏开发
    usdt 大户列表
    linux, windows, mac 的c/c++程序使用 breakpad 来进行崩溃汇报
    将python代码编译成目标机elf可执行程序的方法
    python的zigzag实现及金融技术指标分析库
    如何在left Join 中使用order排序
  • 原文地址:https://www.cnblogs.com/52forjie/p/9706022.html
Copyright © 2011-2022 走看看