【问题标题】:Django 1.8, Multiple Custom User TypesDjango 1.8,多种自定义用户类型
【发布时间】:2015-08-10 08:05:01
【问题描述】:

我正在创建一个有 4 种用户类型的 Django 站点;

  • 超级管理员:基本上管理所有类型的用户
  • UserTypeA:可以登录到站点,基本上会有一个用于某些任意模型的 CRUD 接口。还具有额外的属性(仅适用于 TypeA 用户的特定信息)
  • UserTypeB:可以登录网站并拥有专门针对 TypeB 用户的额外信息,还可以创建和管理 TypeC 用户帐户
  • UserTypeC:可以登录到站点并具有仅与 TypeC 用户相关的额外信息。

请注意,我计划创建自定义界面,而不是使用内置管理界面。实现此用户结构的最佳方法是什么?我更喜欢使用 Django 的内置身份验证系统(它管理密码加盐和散列,以及会话管理等),但如果它是安全的并且可以用于生产,我愿意使用其他一些身份验证系统。

编辑:另外,我的计划是使用 1 个登录屏幕来访问该站点,并利用权限和用户类型来确定每个用户的仪表板上可用的内容。

编辑:是否有可能通过为每种用户类型使用一个应用程序来实现这一点,如果可以,如何使用单个登录屏幕来完成。

【问题讨论】:

  • 您找到解决方案了吗?您可以为需要处理的各种用户类型使用组,然后在注册时根据某些值将人员分配到正确的组。
  • 你为什么不使用 django 的内置权限/组。

标签: python django authentication


【解决方案1】:

首先,您不能为一个项目创建多个身份验证用户群。因此,您必须使用提供的 Django 用户身份验证并将其用于多种类型的用户。 Django 用户有一些您需要在注册期间提供的默认值(尝试在 Django Admin 中创建用户)。您可以做的是创建一个名为“CustomUser”的模型并从AbstractUser 继承。这将使您的“CustomUser”模型成为项目用户的默认模型。因为您从AbstractUser 继承,所以这个“CustomUser”模型将包含原始用户模型的每个字段,然后您可以自己添加一些字段。您还需要在项目的settings.py 文件中指定原始用户模型不再是您的默认身份验证模型,而是将用于身份验证的新“自定义用户”模型。看看下面的代码是否有帮助。

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    type_choices = (
        ('SU', 'Super User'),
        ('A', 'User Type A'),
        ('B', 'User Type B'),
        ('C', 'User Type C'),
    )
    user_type = models.CharField(max_length=2,
                                 choices=type_choices,
                                 default='C')

class UserDetails(model.Model):
    type = models.OneToOneField('CustomUser')
    extra_info = models.CharField(max_length=200)

在上面的代码中,您创建了 CustomUser 模型,用户可以在其中提供用户名、密码等基本信息,这是 Django 中的默认设置。然后您选择它是哪个用户类型并将您的附加信息保存在 UserDetails 模型上,该模型也与您的新身份验证模型具有 OneToOne 关系。您需要做的最后一件事是在 settings.py 文件中。

AUTH_USER_MODEL = 'index.CustomUser'

这里的index 是我的CustomUser 模型在其中创建的应用程序。

希望这会有所帮助。

【讨论】:

  • 如果不同的用户类型需要收集不同的数据字段,如何通过该方法指定?
  • 非唯一字段进入CustomUser类,所有用户共有的字段进入UserDetails。还有,不是ForeignKey,应该是OneToOneField。
  • 我有类似的需求,我要管理多种使用类型,1. Talent - 可以是演员,舞蹈家,歌手等 2. Maker - 可以是导演,演员导演,编舞,音乐总监等我如何维护不同类型的用户?
  • 可以在 UserDetails 模型中创建子类型字段,也可以单独创建所有模型类型。即类型可以是 Talent-actor、Talent-dancer、Talent-singer、Maker-director、Maker-cast-director、Maker-choreographer、Maker-music-director 等。请阅读 Django 中关于模型的第 3 章设计模式和最佳实践。适合初学者到中级程序员的最佳书籍!
【解决方案2】:

你应该只需要使用 Groups Django 机制 - 你需要创建四个像 userA 这样的组,让我们说 common 并检查用户是在第一组还是第二组 - 然后向他展示适当的视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2015-10-28
    相关资源
    最近更新 更多