Django用户模型:save()方法中密码更改的目的是什么

问题描述 投票:1回答:1

有时我想以编程方式设置密码。我执行以下操作:

https://docs.djangoproject.com/en/2.2/topics/auth/default/#changing-passwords
You can also change a password programmatically, using set_password():

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new pass')
u.save()

我想看看在运行u.save()时在save()中是如何实现的>

基本上,我试图了解AbstractBaseUser中使用的save()方法

# ./.venv/lib/python3.7/site-packages/django/contrib/auth/base_user.py
class AbstractBaseUser(models.Model):
    password = models.CharField(_('password'), max_length=128)

    ........

    # Stores the raw password if set_password() is called so that it can
    # be passed to password_changed() after the model is saved.
    _password = None


    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if self._password is not None:
            password_validation.password_changed(self._password, self)
            self._password = None

    ........

    def set_password(self, raw_password):
        self.password = make_password(raw_password)
        self._password = raw_password

def save(self, *args, **kwargs):中的位置

super().save(*args, **kwargs)

将在下一行password_validation.password_changed验证密码的行之前保存由set_password设置的密码

那么首先保存密码,然后再进行验证有什么意义,因为它已经进入数据库了。

有时我想以编程方式设置密码。我执行以下操作:https://docs.djangoproject.com/zh-CN/2.2/topics/auth/default/#changing-passwords您还可以更改密码...

django django-authentication
1个回答
0
投票

[password_validation.password_changed]不执行您认为的操作。

© www.soinside.com 2019 - 2024. All rights reserved.