gpt4 book ai didi

python - 如何在 Django 上区分管理员和客户的用户(模型)

转载 作者:太空狗 更新时间:2023-10-30 00:02:10 25 4
gpt4 key购买 nike

我想将 Django 应用程序的用户分为两类:
- Admin(使用 Django admin 的用户)- 继承自 AbstractUser
- User(客户用户)- 继承自 AbstractBaseUser

我想将这两种用户分开,因为 AbstractUser 的所有字段(is_staffis_superusergroups, permissions) 对我的客户用户以及权限和组没有用,我只是想实现一些不同的东西。这就是为什么我想使用 AbstractBaseUser

但对于 django 管理员用户,AbstractUser 类,它非常完美,尤其是具有权限功能。

class Admin(AbstractUser):
pass

class Customer(AbstractBaseUser):
pass

但是现在,有没有一种方法可以精确地为 django 管理员使用 Admin 的用户模型?并为我的其余应用程序使用 Customer 模型。

我是否必须从头开始实现:

class MyUser(AbstractBaseUser):
username = models.CharField(max_length=30, unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
is_active = models.BooleanField(default=False)

class Admin(MyUser, PermissionsMixin):
is_staff = models.BooleanField(default=True)


class Customer(MyUser):
# specific fields
pass

使用此实现,如果我将 AUTH_USER_MODEL 设置为 User,权限将不起作用,因为 User 没有 权限is_superuseris_staff 字段。

如果将它设置为 Admin,我将无法使用 django.contrib.auth 验证 Customers

那么你们有解决这个问题的方法吗?

最佳答案

Django 为您提供的方式似乎更加灵活且适应 future 。

  1. 您有一个内置的User 模型,您可以覆盖它。无论如何,该模型具有权限、组等。
  2. 如果您需要为不同类型的用户设置不同的字段集,您可以创建一个OneToOne 个人资料模型。
  3. 您的管理员(实际上是员工用户)和普通客户之间的分隔点是 User.is_staff 属性。

通过这种方式,您可以获得很多很酷的东西(与两个完全不同的用户模型相比):

  • 开箱即用:contrib.authcontrib.admin 模块。
  • 易于定制的分隔点:只需覆盖 admin_site.has_permission()给你。
  • 您有能力(但没有义务)创建客户和管理员的用户。
  • 您可以为您的客户分配组和权限(不同于您管理员的)。即使您现在不需要它,谁知道呢。

至于缺点。到目前为止您唯一指出的一个:您的客户将拥有(暂时未使用)权限。好吧,因为它们(以及组)只是单独的表,您的客户数据不会有存储开销的性能。

也就是说,与 yield 相比,开销可以忽略不计。我强烈建议保留 Django 的默认 User 模型并在必要时扩展它。

关于python - 如何在 Django 上区分管理员和客户的用户(模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com