有时我想以编程方式设置密码。我执行以下操作:
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()
Run Code Online (Sandbox Code Playgroud)
我想看看当我们运行时,save() 中的事情是如何实现的u.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 …Run Code Online (Sandbox Code Playgroud)