在Django RESTFramework 的序列化器中,有一些需要注意的通用参数。
首先,我们需要知道的一点就是,序列化器不仅仅使用于模型类,这很重要。
序列化器的主要作用是进行数据的校验(还有进行对数据对象进行转换),并不是仅能对models进行校验,了解到这一点,后面的注意点就容易理解了。
read_only 仅序列化输出
这个参数的作用是告诉序列化器:
- 这个字段只需要进行校验格式或数据类型是否正确,无需入库
- 这个字段需要序列化返回给请求
 其实read_only字段的作用主要在项目中是为了添加模型类中没有的字段信息,比如用户注册后返回用户信息给前端的同时签发Json Web Token,通过作为user的一个token属性进行返回给前端1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36from rest_framework_jwt.settings import api_settings 
 class CreateUserSerializer(serializers.ModelSerializer):
 """
 创建用户序列化器
 """
 ...
 token = serializers.CharField(label='登录状态token', read_only=True) # 增加token字段
 class Meta:
 ...
 fields = ('id', 'username', 'password', 'password2', 'sms_code', 'mobile', 'allow', 'token') # 增加token
 ...
 def create(self, validated_data):
 """
 创建用户
 """
 # 移除数据库模型类中不存在的属性
 del validated_data['password2']
 del validated_data['sms_code']
 del validated_data['allow']
 user = super().create(validated_data)
 # 调用django的认证系统加密密码
 user.set_password(validated_data['password'])
 user.save()
 # 补充生成记录登录状态的token
 jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
 jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
 payload = jwt_payload_handler(user)
 token = jwt_encode_handler(payload)
 user.token = token
 return user
write_only 仅反序列化输入
write_only 和read_only 刚好相反,write_only表示校验输入数据并且入库,但不能进行序列化输出,比如为了安全,密码我们一般会设置为write_only,不会把密码也返回出去到前端。
 
		 
                      