我有一个串行器,用于邀请新用户。在此序列化程序使用的用户模型中,有一个自动生成的激活密钥字段(通过电子邮件发送给用户)。在序列化器中干净地获取激活密钥,而不在响应中返回的User对象上添加激活密钥的最佳方法是什么?出于明显的原因,我不希望激活密钥返回到前端。
models.py:
class User(AbstractBaseUser):
...
activation_key = models.UUIDField(unique=True, default=uuid.uuid4)
...
serializers.py:
class UserInvitationSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = User
fields = ('id', 'email', 'first_name', 'last_name')
def create(self, validated_data):
user = User.objects.create(**validated_data)
random_pass = User.objects.make_random_password(length=10)
user.set_password(random_pass)
user.save()
activation_key = ?
send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])
return user
答案 0 :(得分:2)
activation_key
是自动生成的。
在create()
中,您已经创建了User
实例,因此您可以从该对象中获取激活密钥:
class UserInvitationSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = User
fields = ('id', 'email', 'first_name', 'last_name')
def create(self, validated_data):
user = User.objects.create(**validated_data)
random_pass = User.objects.make_random_password(length=10)
user.set_password(random_pass)
user.save()
activation_key = user.activation_key
send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])
return user
考虑到您在fields
中明确指定了此ModelSerializer
应该返回的内容,因此activation_key
不会显示在API响应中。