Django 基于类的视图中的密码格式无效或未知的哈希算法

Saj*_*ain 2 python api django django-views django-rest-framework

我想通过 API 视图创建用户。但我遇到这个问题:

在此输入图像描述

序列化器.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')
Run Code Online (Sandbox Code Playgroud)

视图.py

class UserRegistration(CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

nev*_*ner 5

create()在保存新用户对象之前,您应该覆盖序列化程序的方法来哈希密码。您可以set_password为此使用:

 class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')

    def create(self, validated_data):
        user = User(
            username=validated_data['username']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user
Run Code Online (Sandbox Code Playgroud)

否则,User.password 将在数据库中被锁定而不进行散列,这是不安全的。

您也可以使用默认create_user调用的方法:set_password

 class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')

    def create(self, validated_data):
        return User.objects.create_user(**validated_data)
Run Code Online (Sandbox Code Playgroud)