在 Django 中为用户设置默认序列化程序
Set default serializer for user in 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
它仍然 returns 每个字段包括 password
如何为用户设置默认序列化程序?这样就只有returns我自己设置的字段了?
尝试使用不同的序列化器,比如一个用于创建(post),另一个用于读取(get)。
在 get 序列化程序中,排除密码字段。
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
我在 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
它仍然 returns 每个字段包括 password
如何为用户设置默认序列化程序?这样就只有returns我自己设置的字段了?
尝试使用不同的序列化器,比如一个用于创建(post),另一个用于读取(get)。
在 get 序列化程序中,排除密码字段。
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