Django 1.8,多种自定义用户类型

Ozz*_*man 18 python authentication django

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

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

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

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

编辑:是否可以通过为每个用户类型使用应用程序来实现此目的,如果是这样,如何使用单个登录屏幕完成此操作.

Min*_*nnR 19

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

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)
Run Code Online (Sandbox Code Playgroud)

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

AUTH_USER_MODEL = 'index.CustomUser'

这里index是我的CustomUser模型创建的应用程序.

希望这可以帮助.

  • 如果不同的用户类型需要收集不同的数据字段,那么如何通过此方法指定? (4认同)
  • 您可以在UserDetails模型中创建子类型字段,也可以单独创建所有模型类型.即类型可以是天才演员,天才舞者,天才歌手,制作导演,制作演员导演,制作者编舞,制作者音乐导演等.请阅读第3章,这是关于Django一书中的模型设计模式和最佳实践.有史以来初学者和中级编码员的最佳书籍! (2认同)