如何解决在 Django 中为用户设置默认序列化程序
我在 django 中创建了一个用于注册的 rest-framework API,它的序列化程序是这样的:
class SignupSerializer(ModelSerializer):
class Meta:
model = User
fields = ('email','password','first_name','last_name')
read_only_fields = ()
def create(self,validated_data):
with transaction.atomic():
new_user = User.objects.create_user(....)
return new_user
现在它工作得很好,但是 problem is that it also returns password hash
在响应对象中。
或者,如果我在任何其他序列化程序中包含 user
并设置 depth=1
,它仍会返回每个字段,包括 password
如何为用户设置默认序列化程序?以便它只返回我自己设置的那些字段?
解决方法
Django Rest Framework 字段可以配置为“只写”。该文档甚至有一个示例,几乎涵盖了您的用例:
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email','username','password']
extra_kwargs = {'password': {'write_only': True}}
def create(self,validated_data):
user = User(
email=validated_data['email'],username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
https://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments
,尝试使用不同的序列化程序,例如一个用于创建(发布),另一个用于读取(获取)。
在获取序列化程序中,排除密码字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。