【问题标题】:how to use check_password inside validate function?如何在验证函数中使用 check_password?
【发布时间】:2019-05-09 13:27:50
【问题描述】:

我有这个序列化器:

class ChangePasswordSerializer(DynamicFieldsModelSerializer):
    current = serializers.CharField()
    confirm = serializers.CharField()

   class Meta:
        model = models.User
        fields = ('password', 'current', 'confirm')
        validators = []

    def update(self, instance, validated_data):
        if instance.check_password(validated_data.get('current')):
            instance.set_password(validated_data['password'])
            instance.save()
        else:
            raise serializers.ValidationError("Current password is not correct")
        return instance

我的更新函数中有这个:

instance.check_password(validated_data.get('current'))

但我希望此操作发生在 validate_current 函数中的函数更新之外,但我不知道如何

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    您可以为当前密码编写自定义验证器

    def validate_current(self, value):
         if not self.instance.check_password(value):
            raise serializers.ValidationError("Current password is not correct")
         return value
    

    你必须从序列化器的视图中传递实例

    【讨论】:

    • self.instance.check_password(value) 就够了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2021-11-24
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多