有时我想以编程方式设置密码。我执行以下操作:
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您还可以更改密码...
[password_validation.password_changed
]不执行您认为的操作。