Django AllAuth 章 使用自定义字段扩展 Django AllAuth 用户模型
注意:本文最初发布在我的 Substack 上,网址为 https://andresalvareziglesias.substack.com/
这是 Django AllAuth 系列文章的最后一章。在这五章中,我们发现了一个小奇迹,一个非常有用的 Django 组件来处理我们所有的身份验证需求。在本章中,我们将学习如何扩展基本的 Django 用户模型以添加自定义字段。
章节列表
- 第 1 章 - Django 中的 Auth 一体化解决方案
- 第 2 章 - 如何安装和配置 Django AllAuth
- 第 3 章 - 使用 Django AllAuth 进行社交登录
- 第 4 章 - 自定义 Django AllAuth UI
- 第 5 章 - 使用自定义字段扩展 Django AllAuth 用户模型 ←这个!
Django 用户模型
AllAuth 使用标准 Django 用户模型,加上一些额外的表来处理社交登录和登录令牌。在 Django 5 中,用户模型位于 django.contrib.auth 包中,并且有一堆预定义字段,您可以在官方文档中阅读:
- https://docs.djangoproject.com/en/5.0/ref/contrib/auth/
有时,这对于我们的项目来说还不够。 Django 允许您创建自定义用户表和用户管理器,来处理每个项目的需求。
我们将创建一个自定义用户表和一个自定义 UserManager 来处理我们的登录和注册过程。
创建自定义用户表
在我们的示例项目中打开 models.py 并编写如下代码:
class MyCustomUser(AbstractBaseUser): email = models.EmailField(unique=True) first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=30, blank=True) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) timezone = models.CharField(max_length=30, default='UTC') is_custom = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) objects = MyCustomUserManager() USERNAME_FIELD = 'email' EMAIL_FIELD = 'email' def __str__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_utc(self): return self.timezone == 'UTC'
我们可以定义一个从 Django 的 AbstractBaseUser 模型扩展的新 User 模型。在这个新模型中,我们可以添加我们需要的所有字段或自定义属性。
这些行很重要:
objects = MyCustomUserManager() USERNAME_FIELD = 'email' EMAIL_FIELD = 'email'
通过这些行,我们将用户模型与自定义 UserManager 链接起来,并且我们还定义了充当唯一“用户名”的字段。
请记住在 admin.py 中注册新模型,以便通过 Django 管理工具对其进行管理。
from django.contrib import admin from .models import MyCustomUser admin.site.register(MyCustomUser)
创建自定义用户管理器
在我们的示例项目中再次打开 models.py(或者如果需要,可以为自定义 UserManager 生成另一个文件)并编写如下代码:
class MyCustomUserManager(BaseUserManager): def create_user(self, email, password=None): if not email: raise ValueError('Users must have an email address') user = self.model( email=self.normalize_email(email), ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, password): user = self.create_user( email=email, password=password, ) user.is_admin = True user.is_staff = True user.save(using=self._db) return user
在此示例中,我们将扩展 BaseUserManager 来创建自定义 UserManager。它创建我们的新用户,并按照我们的预期填充自定义字段。
我们在自定义用户模型的 UserManager 之前定义,因此 Django 知道在新用户创建期间要使用什么类。
使用自定义用户管理器和模型
在项目的设置文件中,我们可以使用以下命令设置项目的当前用户模型:
# Set custom user model as the active one AUTH_USER_MODEL = 'demo.MyCustomUser' # Configure AllAuth username related management, because we are # using the e-mail as username. See: # https://docs.allauth.org/en/latest/account/advanced.html ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_USER_MODEL_USERNAME_FIELD = None
只需这个小更改(以及像往常一样所需的数据库迁移),我们就可以开始使用 AllAuth 注册视图创建用户,以查看我们闪亮的自定义 UserManager 及其正在运行的模型。快速又简单。
我们还禁用 AllAuth 用户名相关管理,因为我们在此示例中使用电子邮件作为用户名。
这就是结局……还是没有?
我们已经到了 AllAuth 系列的最后一章。 AllAuth 是一个很棒的库,可以处理我们应用程序中的身份验证,并且由于其大量的预定义集成,使得使用社交登录变得特别容易。
这是本系列的最后一章,但我将在以后的文章中重新讨论 AllAuth。感谢您的阅读并祝您编码愉快!
关于名单
在 Python 和 Docker 帖子中,我还将撰写其他相关主题(总是技术和编程主题,我保证......祈祷),例如:
- 软件架构
- 编程环境
- Linux操作系统
- 等等
如果您发现了一些有趣的技术、编程语言或其他什么,请告诉我!我总是乐于学习新东西!
关于作者
我是 Andrés,一位来自帕尔马的全栈软件开发人员,我正在踏上提高编码技能的个人旅程。我也是一位自行出版的奇幻作家,以我的名字出版了四本小说。有什么问题都可以问我!
以上是Django AllAuth 章 使用自定义字段扩展 Django AllAuth 用户模型的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优
