gpt4 book ai didi

python - 在 Django 1.5 中使用多个 AUTH_USER_MODEL 的正确方法是什么?

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

我想为 django.contrib.auth 模块使用两种不同的模型。第一个是 Django 提供的默认用户模型,它完全适合管理员访问(组、权限等),但另一个是客户模型,与默认用户模型。这些用户组必须使用不同的表,并且不能有任何关系。

我创建了一个继承自 AbstractBaseUser 的 Customer 模型和一个名为 ChangeBaseUser 的中间件类,如下所示:

class ChangeBaseUser(object):
def process_request(self, request):
match = resolve(request.path)
if match.app_name == "myapp":
settings.AUTH_USER_MODEL = 'myapp.Customer'
else:
settings.AUTH_USER_MODEL = 'auth.User'

它正在工作,但我不确定这是否是正确的方法,因为在文档中有一个部分(link)暗示方便的方法是为默认用户模型分配一个静态值。

如果这不是正确的方法,您对每个模块有多个用户模型有什么建议吗?

最佳答案

如果您的要求是将管理员用户和客户分开,我认为拥有多个用户模型没有任何问题。在这一点上,客户模型就像任何模型一样,只是它与用户模型非常相似,如果它适合你,那就太好了。唯一的缺点是你可能不得不复制 django 为 Django 用户模型提供的许多帮助程序,例如用户的身份验证后端或 session 。如果您愿意做所有这些,这似乎完全没问题。

但是,如果您希望使用许多 django 助手,您可能需要创建一个非常基本的用户模型,它将作为管理员和客户的基础:

class User(AbstractBaseUser):
# use this for auth and sessions

class Admin(models.Model):
user = models.OneToOneField(UserBase, related_name='admins')
# ... other admin-specific fields

class Customer(models.Model):
user = models.OneToOneField(UserBase, related_name='admins')
# ... other customer-specific fields

这将允许您重用 Django 提供的许多开箱即用的东西,但是它会产生一些额外的数据库开销,因为必须计算更多的连接。但随后您可以为客户缓存内容,以便恢复一些性能。

关于python - 在 Django 1.5 中使用多个 AUTH_USER_MODEL 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19253842/

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