在 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