自定义Django用户模型,使电子邮件成为USERNAME_FIELD。
项目描述
CUser使得使用电子邮件地址作为您的标识令牌而不是用户名变得简单。
CUser是一个自定义的Django用户模型(扩展AbstractBaseUser),因此使用它需要非常少的努力。
CUser与纯Django User 的唯一区别是电子邮件地址是 USERNAME_FIELD(并且用户名不存在)。
CUser支持Django 3.2 - 5.1。如果您需要使用CUser与Django 1.8 - 3.1一起使用,您必须安装一个较旧且未维护的CUser版本,如“安装和设置”部分中所述。
为什么使用CUser?
因为您想要使用 django.contrib.auth 中除 username 字段之外的所有功能,并且希望用户可以使用电子邮件地址进行登录。同时,您不想创建自己的自定义用户模型或认证后端。
安装与设置
重要:为了简化流程,以下步骤将指导您使用CUser的 CUser 模型作为您的Django项目用户模型。然而,强烈建议您设置一个自定义用户模型,该模型扩展CUser的 AbstractCUser 类,即使CUser的 CUser 模型对您来说已经足够(这样,如果需要,您可以自定义用户模型)。如果您不想遵循此建议而只想使用CUser的 CUser 模型,只需按照以下步骤操作(您可以跳过本段落的其余部分)。如果您想遵循此建议,您仍然应该按照以下步骤操作,但需要以下调整:在步骤3之后,遵循 这些说明,但将 from django.contrib.auth.models import AbstractUser 替换为 from cuser.models import AbstractCUser,并将 from django.contrib.auth.admin import UserAdmin 替换为 from cuser.admin import UserAdmin。然后,对于以下步骤的步骤4,您应将 AUTH_USER_MODEL 设置为您自定义的用户模型,而不是CUser的 CUser 模型。然后,您应该运行 python manage.py makemigrations。之后,您可以按照以下剩余步骤的原文进行操作。
如果您的Django项目之前使用了Django的默认用户模型 django.contrib.auth.models.User,或者您不熟悉使用自定义用户模型,请先转到 注意 部分(然后返回)。否则,继续前进!
使用 pip 安装
# Django 3.2 - 5.1 pip install django-username-email # Django 3.1 (unmaintained) pip install django-username-email==2.4.2 # Django 2.2 or 3.0 (unmaintained) pip install django-username-email==2.3.1 # Django 2.0 or 2.1 (unmaintained) pip install django-username-email==2.2.4 # Django 1.11 (unmaintained) pip install django-username-email==2.1.6 # Django 1.8 - 1.10 (unmaintained) pip install django-username-email==2.1.2
将 cuser 添加到您的 INSTALLED_APPS 设置
INSTALLED_APPS = [ ... 'cuser', ]
使用settings.py中的 AUTH_USER_MODEL 设置指定自定义模型作为您项目的默认用户模型
AUTH_USER_MODEL = 'cuser.CUser'
如果您使用Django的默认 AuthenticationForm 类,强烈建议您使用CUser中包含的类替换它。这将使 <input> 的 type 属性设置为 email,并且浏览器的自动完成功能将建议电子邮件地址而不是用户名。例如,如果您的项目正在使用Django的默认 LoginView 视图(或Django < 1.11中的 login 视图),这是您在urls.py中输入的内容,以使用CUser的 AuthenticationForm 类
from cuser.forms import AuthenticationForm from django.conf.urls import include, url from django.contrib.auth.views import LoginView urlpatterns = [ url(r'^accounts/login/$', LoginView.as_view(authentication_form=AuthenticationForm), name='login'), url(r'^accounts/', include('django.contrib.auth.urls')), ... ]
或者,如果您正在使用Django < 1.11
from cuser.forms import AuthenticationForm from django.conf.urls import include, url from django.contrib.auth.views import login urlpatterns = [ url(r'^accounts/login/$', login, {'authentication_form': AuthenticationForm}, name='login'), url(r'^accounts/', include('django.contrib.auth.urls')), ... ]
运行迁移。
python manage.py migrate
很可能您希望 foo@example.com 和 FOO@example.com 被视为同一个电子邮件地址。处理方法有很多种,具体取决于您项目的需求和个人偏好,因此CUser不提供开箱即用的解决方案。如果您适用,您需要自己解决这个问题。如果您正在使用CUser的 AuthenticationForm 类(见步骤5),您可能想将其子类化并覆盖 error_messages['invalid_login']。
配置
要覆盖任何默认设置,在settings.py中创建一个名为 CUSER 的字典,其中包含您想要覆盖的每个设置。例如
CUSER = {
'app_verbose_name': 'Authentication and Authorization',
'register_proxy_auth_group_model': True,
}
这些是设置
app_verbose_name(默认:_("自定义 用户"))
此设置控制CUser将用于其AppConfig类verbose_name的值。
register_proxy_auth_group_model(默认:False)
当设置为True时,CUser的admin.py将注销Django的默认Group模型并注册其自己的代理模型,该模型是Django默认Group模型的代理(也命名为Group)。如果您希望Django的默认Group模型在管理界面中与CUser的CUser模型出现在相同的位置,这非常有用。
注意事项
如果您有引用Django User模型的表,您必须删除那些表和迁移,然后重新迁移。这将确保从开始设置就正确无误。
您应使用django.contrib.auth.get_user_model()而不是直接引用User模型。
当您定义与User模型的外键或多对多关系时,您应使用AUTH_USER_MODEL设置指定自定义模型。
例如
from django.conf import settings
from django.db import models
class Profile(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
许可证
在MIT许可下发布。有关详细信息,请参阅LICENSE。
有问题、评论或任何其他事项吗?
提交问题
项目详情
django_username_email-2.5.6.tar.gz的散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5c7eb9eb47bad6d3246cb05993f2f8e95d41dfb852dffb63acd6d26550934079 |
|
MD5 | 13d8e9d4a40a3b3312bb79607f1e505d |
|
BLAKE2b-256 | f5468d3abb975f8635f67574a262cc2b0c6675bc0887d8d0f3de9e53c778f275 |
django_username_email-2.5.6-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0c35008c138c8dce9fab33f86179a87d2e3e3962ea738c5ab62fc5f7e2021187 |
|
MD5 | 7bbfd8563717a7d9fea95520bd30b579 |
|
BLAKE2b-256 | adf98c64629569e7e131b0facbd3522a1446122200fb466b97e04531ce2ca88a |