python - 为什么 AbstractBaseUser 放在单独的模块中?

标签 python django

我热衷于学习 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)

有趣的是,AbstractBaseUserBaseUserManager被封装为一个单独的模块,而不是合并到models.py中,尽管代码只有139行很长。

base_user.py中,它声称

""" This module allows importing AbstractBaseUser even when django.contrib.auth is not in INSTALLED_APPS."""

我无法理解它的想法。

这样设计模块有什么好处?

最佳答案

git blame 是回答此类问题的有用工具。

如果您对 base_user.py 进行 git Blame 操作,您可以看到注释已添加到 this commit 中,而 ticket 24564 是 ojit_a 的一部分。

正如该票所解释的,如果您想从 AbstractBaseUser 导入 o​​jit_code ,您必须将 django.contrib.auth.models 添加到 django.contrib.auth 。这是因为该模块包含非抽象模型,例如 INSTALLED_APPS

因此它被移动到一个单独的模块,这样就可以在不将 User 添加到 django.contrib.auth 的情况下导入它。

关于python - 为什么 AbstractBaseUser 放在单独的模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50604917/

相关文章:

django - 如何在 Django 模板中将名称反转为绝对 URL?

django - django-debug-toolbar 中的 "elapsed time"是什么?

Python:如何生成全因子组合?

python - .astype ("uint8") 这里有什么用途?

Python Pandas 日均

python - 没有模型和数据库的Django元素

django - 如何过滤使用扩展模型类字段连接的事件用户

Django 和南 : using south makes syncdb show myapp as 'not synced (use migrations)'

Python 记录器格式不格式化字符串

python - 如何从python中的数据透视表计算最大值