我正在创建一个有4种类型用户的Django站点;
注意到我计划创建自定义界面而不使用内置管理界面。实现此用户结构的最佳方法是什么?我更喜欢使用Django的内置身份验证系统(管理密码salting和散列,以及会话管理等),但如果它是安全的并且生产就绪,我将愿意使用其他一些身份验证系统。< / p>
编辑另外,我的计划是使用1个登录屏幕访问该网站,并利用权限和用户类型来确定每个用户的信息中心可用的内容。
编辑:是否可以通过为每种用户类型使用应用来实现此目的,如果是这样,如何通过单一登录屏幕完成此操作。
答案 0 :(得分:19)
首先,您无法为项目创建多个身份验证用户群。因此,您必须使用提供的Django用户身份验证,并将其分配给多种类型的用户。 Django用户在注册期间需要提供一些默认值(尝试在Django Admin中创建用户)。你可以做的是创建一个名为&#39; CustomUser&#39;并继承自AbstractUser
。这将使您的&#39; CustomUser&#39;为项目用户建模默认值。因为您继承了AbstractUser
这个&#39; CustomUser&#39; model将包含原始Users模型中的每个字段,然后您可以自己添加一些字段。您还需要在项目的settings.py
文件中指定原始用户模型不再是您的默认身份验证模型,它是您新的&#39; CustomUser&#39;将用于身份验证的模型。看看以下代码是否有帮助。
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
模型创建的应用。
希望这有帮助。
答案 1 :(得分:0)
您应该只需要使用Groups Django机制-您需要创建四个组(例如userA),并说出common,并检查用户是否在第一组或第二组中-然后向他显示适当的视图