Django - 为什么我应该扩展用户而不是创建我的一个用户 class
Django - Why should I extend User as opposed to creating my one user class
全部,
我很难理解在 Django 中扩展用户 class 的优势是什么?我觉得用我想要的所有文件覆盖它并创建我自己的用户 class 更有利。
我问这个是因为我看到的所有教程总是提到创建配置文件 class 并从那里扩展用户 class。
如果我想多次扩展用户 class,我会看到优势,但我觉得这永远不会发生。
您需要扩展 AbstractUser class 因为您将要使用 django 已经提供的功能。这包括身份验证、组、权限等。
你不会想从头开始写的。即使您由于应用程序的独特需求而计划自己编写所有内容,仍然建议扩展 AbstractUser class。将来您可能需要使用它的某些功能。
与你的情况相反,如果有人只需要 Django 已经提供的用户模型的功能,仍然建议创建扩展 AbstractUser class 的新模型。这是因为,一旦您在 settings.py 中设置了 AUTH_USER_MODEL
,您将无法(或将很难)更改它以供将来更改。这样做,将始终让您自由使用 django 提供的所有功能并实现您可能需要实现的功能。
因此,理想的做法是始终在任何项目开始时(在任何迁移之前)执行此操作:
users.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=25, blank=True,unique=True, null=True)
def __str__(self):
return self.username
在你的 settings.py
.
AUTH_USER_MODEL = 'users.User'
这是 Django AbstractUser class 的源代码,您可以从中扩展自定义用户模型。它在前几行中这样说:
An abstract base class implementing a fully-featured User model with
admin-compliant permissions.
如果您不包含 Django 的默认 classes,可能会出现错误。就拿上面那个,如果你没有添加权限,你可能无法访问 Django 的管理站点。 is_active
、is_staff
等字段为您以后自定义身份验证提供了更大的灵活性。
深入挖掘,还有额外的配置:
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
除非您绝对肯定可以将所有这些都包含在您的模型中,否则我只会建议您利用已经给出的内容。
全部,
我很难理解在 Django 中扩展用户 class 的优势是什么?我觉得用我想要的所有文件覆盖它并创建我自己的用户 class 更有利。
我问这个是因为我看到的所有教程总是提到创建配置文件 class 并从那里扩展用户 class。
如果我想多次扩展用户 class,我会看到优势,但我觉得这永远不会发生。
您需要扩展 AbstractUser class 因为您将要使用 django 已经提供的功能。这包括身份验证、组、权限等。
你不会想从头开始写的。即使您由于应用程序的独特需求而计划自己编写所有内容,仍然建议扩展 AbstractUser class。将来您可能需要使用它的某些功能。
与你的情况相反,如果有人只需要 Django 已经提供的用户模型的功能,仍然建议创建扩展 AbstractUser class 的新模型。这是因为,一旦您在 settings.py 中设置了 AUTH_USER_MODEL
,您将无法(或将很难)更改它以供将来更改。这样做,将始终让您自由使用 django 提供的所有功能并实现您可能需要实现的功能。
因此,理想的做法是始终在任何项目开始时(在任何迁移之前)执行此操作:
users.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=25, blank=True,unique=True, null=True)
def __str__(self):
return self.username
在你的 settings.py
.
AUTH_USER_MODEL = 'users.User'
这是 Django AbstractUser class 的源代码,您可以从中扩展自定义用户模型。它在前几行中这样说:
An abstract base class implementing a fully-featured User model with admin-compliant permissions.
如果您不包含 Django 的默认 classes,可能会出现错误。就拿上面那个,如果你没有添加权限,你可能无法访问 Django 的管理站点。 is_active
、is_staff
等字段为您以后自定义身份验证提供了更大的灵活性。
深入挖掘,还有额外的配置:
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
除非您绝对肯定可以将所有这些都包含在您的模型中,否则我只会建议您利用已经给出的内容。