set_password()未设置DRF密码

时间:2019-05-14 07:22:14

标签: python django authentication django-rest-framework

我有以下问题:

为什么密码没有被散列?

为什么save_password没有设置密码?

platforms = Platform.objects.all()
platforms[2].is_active
>> True
platforms[2].password
>> 'efgh'
platforms[2].check_password("efgh")
>> False
platforms[2].set_password("abcd")
platforms[2].save()
platforms[2].check_password("abcd")
>> False
platforms[2].password
>> 'efgh'

models.py

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)
class Platform(AbstractUser):
    pass

serializers.py

class PlatformSerializer(serializers.ModelSerializer):
    class Meta:
        model  = Platform
        fields = ("username", "password")

        def create(self, validated_data):
            password = validated_data.pop('password')
            platform = Platform(**validated_data)
            platform.set_password(password)
            platform.save()
            return platform

views.py

class CreatePlatform(viewsets.ModelViewSet):
    queryset           = Platform.objects.all()
    serializer_class   = PlatformSerializer
    pagination_class   = None
    permission_classes = (AllowAny, )

在我的 settings.py 中,我有AUTH_USER_MODEL = 'users.Platform'

PS:创建的令牌正常

1 个答案:

答案 0 :(得分:4)

p = platforms[2]  
p.set_password("abcd")
p.save()
p.check_password("abcd")
>> True