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 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 adminfrom .models import mycustomuseradmin.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 oneAUTH_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.htmlACCOUNT_AUTHENTICATION_METHOD = 'email'ACCOUNT_EMAIL_REQUIRED = TrueACCOUNT_UNIQUE_EMAIL = TrueACCOUNT_USERNAME_REQUIRED = FalseACCOUNT_USER_MODEL_USERNAME_FIELD = None

只需这个小更改(以及像往常一样所需的数据库迁移),我们就可以开始使用 allauth 注册视图创建用户,以查看我们闪亮的自定义 usermanager 及其正在运行的模型。快速又简单。

我们还禁用 allauth 用户名相关管理,因为我们在本例中使用电子邮件作为用户名。

这就是结局……还是没有?

我们已经到了 allauth 系列的最后一章。 allauth 是一个很棒的库,可以处理我们应用程序中的身份验证,并且由于其大量的预定义集成,使得使用社交登录变得特别容易。

这是本系列的最后一章,但我将在以后的文章中重新讨论 allauth。感谢您的阅读并祝您编码愉快!

关于名单

pythondocker 帖子中,我还将撰写其他相关主题(始终是技术和编程主题,我保证……祈祷),例如:

软件架构编程环境linux操作系统等等

如果您发现一些有趣的技术、编程语言或其他什么,请告诉我!我总是乐于学习新东西!

关于作者

我是 andrés,一位来自帕尔马的全栈软件开发人员,正在踏上提高编码技能的个人旅程。我也是一位自行出版的奇幻作家,以我的名字出版了四本小说。有什么问题都可以问我哦!

以上就是Django AllAuth 章 使用自定义字段扩展 Django AllAuth 用户模型的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用 Ollama 和 LangChain 创建本地 RAG 代理
上一篇 2025年12月13日 12:28:04
避免条件语句的智慧
下一篇 2025年12月13日 12:28:17

相关推荐

  • 一周学会蝴蝶号无人直播的完整课程计划推荐

    一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐

    掌握“蝴蝶号”无人直播的核心要义,一周内可搭建初步系统并具备独立操作能力。1.第一天厘清概念并完成基础环境搭建;2.第二天熟悉obs基础操作与场景构建;3.第三天准备高质量内容素材并确定风格;4.第四天设置自动化逻辑与推流配置;5.第五天处理互动机制及常见问题;6.第六天进行首次正式直播并复盘;7.…

    2026年9月21日 用户投稿
    100
  • 为“架构”再建个模:如何用代码描述软件架构?

    在 archguard 平台中,为了实现对架构的治理,我们需要通过代码和模型来描述所需处理的内容和数据。因此,archguard 引入了代码模型、依赖模型、变更模型等,而架构模型和架构治理模型则是两个核心的部分。其它如构建模型等,将会在后续逐步引入到系统中。 PS:本文中的架构展开是基于自动化分析需…

    2026年9月21日
    000
  • VSCode报错怎么显示中文_VSCode错误信息本地化与中文显示教程

    安装中文语言包可将VSCode界面和错误提示转为中文,提升使用便捷性;但外部工具如编译器、解释器生成的报错仍为英文,因VSCode仅显示其原始输出,无法翻译。 在VSCode中让报错信息显示中文,核心在于安装并启用官方的中文(简体)语言包。这不仅仅是针对错误信息,而是将整个VSCode的用户界面本地…

    2026年9月21日
    000
  • SystemTap

    SystemTap 简介 systemtap 是一款用于诊断 linux 系统性能或功能问题的开源工具。它使得对运行中的 linux 系统进行诊断和调试变得更加便捷和高效。有了 systemtap,开发者和调试人员无需重新编译内核、安装新内核或重启系统等繁琐步骤。为了解决系统问题或提升性能,开发者只…

    2026年9月21日
    100
  • VSCode怎么设置变量窗口_VSCode调试时变量监视面板使用教程

    答案:配置launch.json并设置断点后,通过VSCode调试界面的变量和监视面板可实时查看变量值。具体包括正确设置program路径,利用变量面板查看作用域内变量,使用监视面板添加表达式或变量进行持续跟踪,结合调试按钮控制执行流程,并可通过条件断点、控制台输出、debugger语句、Sourc…

    2026年9月21日
    100
  • vim 学习笔记(一)—— vim模式与创建、编辑文件

    vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件

    vim 是基于linux开发的一款强大文本编辑器,源自vi并进行了扩展,具有跨平台和广泛工具支持的特性。据说,vim的高手能够以思想的速度在键盘上操作文本,因此我决定加入学习的行列。学习资料是b站上的生肉教程【公开课】完美的vim课程【生肉】,该教程侧重于讲解vim的思想和精髓,而非具体命令的详细介…

    2026年9月21日 用户投稿
    100
  • Xdebug配置与故障排除:解决PHP调试连接导致的网页超时问题

    本文旨在解决Xdebug在IDE未监听调试连接时可能导致的网页加载缓慢或超时问题。我们将深入探讨Xdebug的工作原理、关键配置参数,并提供一套系统的故障排除方法,包括如何启用详细日志记录以及检查多重配置文件的影响,以确保Xdebug仅在需要时激活,避免不必要的性能开销。 1. 理解Xdebug的工…

    2026年9月21日
    100
  • MySQL自动化性能测试方案_MySQL持续监控调优数据库效率

    MySQL自动化性能测试方案_MySQL持续监控调优数据库效率MySQL自动化性能测试方案_MySQL持续监控调优数据库效率MySQL自动化性能测试方案_MySQL持续监控调优数据库效率MySQL自动化性能测试方案_MySQL持续监控调优数据库效率

    mysql自动化性能测试和持续监控的核心在于构建闭环反馈系统,包含模拟真实负载、全面数据采集、自动化执行与分析、数据驱动的持续调优四大环节。①测试环境需与生产一致并隔离,使用docker、虚拟机或云沙盒,解决数据同步与脱敏问题;②负载生成工具如sysbench、jmeter、locust或自定义脚本…

    2026年9月21日 用户投稿
    200
  • Win10与Ubuntu 18.04双系统安装。(Win10引导Linux)[通俗易懂]

    Win10与Ubuntu 18.04双系统安装。(Win10引导Linux)[通俗易懂]Win10与Ubuntu 18.04双系统安装。(Win10引导Linux)[通俗易懂]Win10与Ubuntu 18.04双系统安装。(Win10引导Linux)[通俗易懂]Win10与Ubuntu 18.04双系统安装。(Win10引导Linux)[通俗易懂]

    大家好,很高兴再次与大家见面,我是你们的老朋友全栈君。 作为一个初学者,为了满足自己的求知欲,我按照几位大神写的教程尝试了一遍安装过程,现在来和大家分享一下。 1、Win10安装(如果已经安装,请跳过) 1)制作系统U盘(参考微信公众号“软件安装管家”): https://www.php.cn/li…

    2026年9月21日 用户投稿
    400
  • VSCode怎么改环境_VSCode切换Python/Node等多版本环境教程

    切换VSCode环境需先安装对应语言扩展,再通过命令面板选择解释器或使用nvm切换Node版本,配合虚拟环境或launch.json配置确保运行和调试时使用正确版本,可通过终端命令验证环境,若失效可检查缓存、扩展冲突或权限问题。 VSCode改环境,其实就是让VSCode知道你想用哪个版本的Pyth…

    2026年9月21日
    100
  • Linux中如何安装Redis_Linux安装Redis服务的完整教程

    安装编译环境和依赖:Ubuntu/Debian用apt安装build-essential tcl wget,CentOS/RHEL用yum安装Development Tools和tcl wget。2. 下载Redis 7.2.4源码包并%ignore_a_1%,进入目录后执行make编译,可选mak…

    2026年9月21日
    000
  • VSCode代码空格怎么解决_VSCode缩进与格式处理教程

    解决VSCode代码空格和缩进问题,需配置settings.json中的缩进规则并引入外部格式化工具。首先设置”editor.tabSize”、”editor.insertSpaces”和”editor.detectIndentation&…

    2026年9月21日
    200
  • Linux如何查看网络带宽使用情况

    使用iftop实时查看网络连接带宽,nethogs按进程监控流量,sar查看历史网络统计,vnstat记录长期流量,四者分别适用于实时监控、进程定位、短期统计和长期分析。 在Linux系统中,查看网络带宽使用情况有多种方法,可以通过命令行工具实时监控网络流量和带宽占用。以下是几种常用且实用的方式。 …

    2026年9月21日
    100
  • Linux如何设置目录的执行权限

    目录的执行权限是访问其内容的“钥匙”,使用chmod命令可通过符号或八进制模式设置,常见权限为755(所有者rwx,组和其他用户rx),递归设置时推荐结合find命令分别处理文件和目录,避免误加执行权限。 在Linux中,设置目录的执行权限( x )并非意味着你可以“运行”这个目录,而是赋予了你进入…

    2026年9月21日
    100
  • VSCode的自动保存功能如何开启?

    在VSCode中开启自动保存需进入“文件”→“首选项”→“设置”,搜索auto save并选择Files: Auto Save模式,可选afterDelay、onFocusChange或onWindowChange,其中afterDelay可设置延迟时间如1000毫秒,启用后状态栏显示保存状态以确认…

    2026年9月21日
    000
  • 如何配置VSCode与Jupyter Notebook进行交互式数据科学编程?

    首先安装Python、VSCode及Python扩展,再通过pip安装jupyter;接着在VSCode中创建或打开.ipynb文件,使用Shift+Enter运行单元格;然后通过Ctrl+Shift+P选择Python解释器并确保安装ipykernel以匹配内核;最后启用变量查看器、代码块分隔符和…

    2026年9月21日
    000
  • Linux如何检查系统中缺失的依赖库

    使用ldd和readelf检查依赖,通过包管理器安装缺失库。ldd显示not found时,用apt-file或yum provides查找并安装对应软件包,必要时添加库路径至/etc/ld.so.conf并运行ldconfig更新缓存。 在Linux系统中,程序运行时依赖各种共享库(.so文件),…

    2026年9月21日
    000
  • 蝴蝶号内容创作不露脸的五大绝技与执行方法 | 快速提升曝光率的实用操作流程

    不露脸也能玩转蝴蝶号内容创作,关键在于将焦点从个人形象转移到内容本身与观众体验上,通过声音叙事、动态文字、手部特写、数据可视化和场景搭建五大核心策略构建吸引力,结合高质量音画配合、精准的受众定位、稳定更新与算法互动,提升曝光率;同时规避素材版权、声音质量与画面单调等技术挑战,善用免费或付费正版素材、…

    2026年9月21日
    200
  • 哪些Docker扩展能让你在VSCode内轻松管理容器?

    Docker官方扩展是VSCode中管理容器的核心工具,提供容器、镜像、卷、网络的可视化操作,结合Remote-Containers可实现容器内开发,辅以YAML、GitLens等扩展提升效率,需确保本地Docker daemon运行。 在 VSCode 中管理 Docker 容器,最核心的扩展是 …

    2026年9月21日
    100
  • 如何为VSCode设置最小化到系统托盘?

    VSCode不支持内置最小化到系统托盘功能,可通过第三方工具实现:Windows推荐使用RBTray或AutoHotkey脚本,Linux可借助AppIndicator扩展,macOS则依赖Dock最小化及辅助工具视觉隐藏。 VSCode 本身不提供内置的“最小化到系统托盘”功能,但可以通过一些方法…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信