我热心学习Django的源头,从底层建立我的技能。
在用户模型中,它具有password属性。使用命令from django.contrib.auth.models import User
,
我检查了模块django/models.py,找不到password = models.CharField()
,但最终在django/base_user.py找到了
class AbstractBaseUser(models.Model):
password = models.CharField(_('password'), max_length=128)
last_login = models.DateTimeField(_('last login'), blank=True, null=True)
有趣的是,AbstractBaseUser
和BaseUserManager
被封装为一个单独的模块,而不是合并到models.py
,即使代码只有139行。
在base_user.py
中,它声称
“”” 即使django.contrib.auth是,该模块也允许导入AbstractBaseUser 不在INSTALLED_APPS。“”“
掌握它的想法是我所不知道的。
以这种方式设计模块有什么好处?
答案 0 :(得分:2)
task.status()
可以成为回答这类问题的有用工具。
如果您对base_user.py
进行git责备,则可以看到评论已添加到this commit中,ticket 24564属于{{3}}。
如该故障单所述,如果您要从git blame
导入AbstractBaseUser
,则必须将django.contrib.auth.models
添加到django.contrib.auth
。这是因为该模块包含非抽象模型,如INSTALLED_APPS
。
因此,它被移动到一个单独的模块,允许导入它而不将User
添加到django.contrib.auth
。