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。感谢您的阅读并祝您编码愉快!

关于名单

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

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

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

关于作者

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

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

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2196251.html

(0)
上一篇 2025年2月25日 21:39:26
下一篇 2025年2月25日 21:39:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 避免条件语句的智慧

    循环复杂度是衡量代码复杂性和混乱程度的指标。 高圈复杂度并不是一件好事,恰恰相反。 简单来说,圈复杂度与程序中可能的执行路径的数量成正比。换句话说,圈复杂度和条件语句的总数(尤其是它们的嵌套)密切相关。 所以今天我们来谈谈条件语句。 反如果…

    2025年2月25日
    000
  • 如何使用 Ollama 和 LangChain 创建本地 RAG 代理

    什么是 rag? rag 代表检索增强生成,这是一种强大的技术,旨在通过以文档形式为大型语言模型(llm)提供特定的相关上下文来增强其性能。与纯粹根据预先训练的知识生成响应的传统法学硕士不同,rag 允许您通过检索和利用实时数据或特定领域的…

    2025年2月25日
    200
  • 如何构建简单的 AI 代理:分步指南

    人工智能无处不在,从回答您问题的聊天机器人到管理您日程安排的智能助手。但您是否知道只需几步即可构建自己的人工智能代理?无论您是开发人员还是好奇的爱好者,本指南都将向您展示如何创建一个可以执行基本任务的简单 ai 代理,同时让事情变得有趣和简…

    2025年2月25日
    200
  • 释放 Python 脚本的力量:日复一日的 DevOps 工具系列

    欢迎来到“50 天 50 个 devops 工具”系列的第 28 天!今天,我们将深入探讨 python 脚本世界——这是任何 devops 专业人员的一项关键技能。 python 以其简单性、可读性和广泛的库支持而闻名,已成为自动化任务、…

    2025年2月25日
    200
  • 使用 Asyncio 创建和管理任务

    asyncio 允许开发者轻松地用 python 编写异步程序。该模块还提供了多种异步任务的方法,并且由于执行方法多种多样,因此可能会让人困惑于使用哪一种。 在本文中,我们将讨论使用 asyncio 创建和管理任务的多种方法。 什么是异步任…

    2025年2月25日
    200
  • 我使用 Python 自动化 XML 字段检查的那一天

    这一切都始于我接受检查多个 xml 文件是否缺少字段的任务。在我们继续下一步之前,团队需要确保这些文件中存在所有必填字段。听起来很简单,对吧?嗯,不完全是。 我打开第一个 xml 文件,扫描属性,手动查找必填字段,然后勾选相应的框。正如你所…

    2025年2月25日
    200
  • streamlit教程 Streamlit新手入门指南

    Streamlit 学习指南:数据科学简化Streamlit是一款Python库,用于创建交互式Web应用程序,特别是用于数据科学和机器学习。它的优势包括:简单性:无需Web开发知识交互性:用户可输入参数和查看可视化可移植性:可在任何有浏览…

    2025年2月25日
    200
  • streamlit怎么布局控件

    在 Streamlit 中,布局控件主要有 6 种方式:侧边栏控件:用于应用程序侧边栏,可添加文本输入、复选框等控件。主体控件:用于应用程序主体区域,包含文本输入、复选框等控件。行和列布局:使用 st.columns 和 st.rows 创…

    2025年2月25日
    200
  • streamlit编写登录界面

    在 Streamlit 中编写登录界面涉及以下步骤:创建一个表单,其中包含用户名和密码输入字段。验证用户提交的输入,检查其是否与预期的值匹配。使用 st.info、st.success 和 st.error 小部件显示提示消息。使用 st.…

    2025年2月25日
    200
  • streamlit中文手册

    Streamlit 是一个 Python 库,用于构建和部署交互式机器学习和数据科学应用程序,无需复杂的 Web 开发知识。它提供了多种内置组件和函数,简化了应用程序开发,使其快速、交互且易于部署。 Streamlit 中文手册 什么是 S…

    2025年2月25日
    200

发表回复

登录后才能评论