Django AllAuth 章 使用自定义字段扩展 Django AllAuth 用户模型

2024-08-14 0 1,012

注意:本文最初发布在我的 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 并编写如下代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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 模型。在这个新模型中,我们可以添加我们需要的所有字段或自定义属性。

这些行很重要:

1

2

3

objects = mycustomusermanager()

username_field = 'email'

email_field = 'email'

通过这些行,我们将用户模型与自定义 usermanager 链接起来,并且我们还定义了充当唯一“用户名”的字段。

记得在 admin.py 中注册新模型,以便通过 django 管理工具进行管理。

1

2

3

4

from django.contrib import admin

from .models import mycustomuser

admin.site.register(mycustomuser)

创建自定义用户管理器

再次打开我们的示例项目中的 models.py (或者如果需要的话,为自定义 usermanager 生成另一个文件)并编写如下代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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 知道在新用户创建期间要使用什么类。

使用自定义用户管理器和模型

在我们项目的设置文件中,我们可以使用以下命令设置项目的当前用户模型:

1

2

3

4

5

6

7

8

9

10

11

# 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 帖子中,我还将撰写其他相关主题(始终是技术和编程主题,我保证……祈祷),例如:

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

关于作者

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

免责声明
1. 本站所有资源来源于用户上传和网络等,如有侵权请邮件联系本站整改team@lcwl.fun!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系本站工作人员处理!
6. 本站资源售价或VIP只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 因人力时间成本问题,部分源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
9.本站所有源码资源都是经过本站工作人员人工亲测可搭建的,保证每个源码都可以正常搭建,但不保证源码内功能都完全可用,源码属于可复制的产品,无任何理由退款!

网站搭建学习网 Python Django AllAuth 章 使用自定义字段扩展 Django AllAuth 用户模型 https://www.xuezuoweb.com/13044.html

常见问题
  • 本站所有的源码都是经过平台人工部署搭建测试过可用的
查看详情
  • 购买源码资源时购买了带主机的套餐是指可以享受源码和所选套餐型号的主机两个产品,在本站套餐里开通主机可享优惠,最高免费使用主机
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

Fa快捷助手
手机编程软件开发

在手机上用手点一点就能轻松做软件

去做软件
链未云主机
免备案香港云主机

开通主机就送域名的免备案香港云主机

去使用
链未云服务器
免备案香港云服务器

支持售后、超低价、稳定的免备案香港云服务器

去使用