繁体   English   中英

django创建多个类型用户的最佳方法

[英]django best approach for creating multiple type users

我想在django中创建多个用户。 我想知道哪种方法最好..

class Teachers(models.Model):
    user = models.ForeignKey(User)
    is_teacher = models.BooleanField(default=True)
    .......

或者我应该使用..

class Teacher(User):
    is_teacher = models.BooleanField(default=True)
    .......

或者我必须制作自定义用户模型...这对于创建多个类型的用户来说会很好......

Django没有多个用户 - 它只有一个用户,然后根据权限用户可以做不同的事情。

所以,从一开始 - 在django中只有一个用户类型。 如果使用默认身份验证框架,则此用户的模型称为User ,来自django.contrib.auth.models

如果要在django中自定义用户行为,可以执行以下三项操作:

  1. 自定义验证方式 默认情况下,使用存储密码的数据库进行身份验证。 您可以针对facebook / google等进行身份验证或针对现有用户数据库进行身份验证 - 例如,如果您使用的是Windows网络,则使用ActiveDirectory。

  2. 创建自定义权限 ,并根据这些权限限制用户可以执行的功能。 默认情况下,在每个模型上 - django将添加基本权限“可以编辑”,“可以删除”,“可以读取”。 您可以创建自己的,然后检查用户是否具有这些特定权限。

  3. 您可以存储有关用户的额外信息,以及django通常存储的内容。 有两种方法可以执行此操作,具体取决于您需要多少自定义。 如果django默认提供的所有内容都适合您,而您想要做的就是存储有关用户的额外信息,您可以扩展用户模型 - 在以前的版本中,这称为创建自定义配置文件。 如果您想要更深入的自定义,您拥有的另一个选择是创建自己的User模型 自定义用户模型的最常见用途是,如果要使用电子邮件地址作为用户名。

您不必全部三个,事实上有时您只想存储一些额外信息或使用他们的电子邮件地址进行身份验证; 在某些应用程序中,您必须修改所有三个位置。

在您的情况下,由于您要做的只是存储有关用户的额外信息 ,您需要通过创建引用User的模型来扩展用户模型 (注意:您不从User继承):

class Profile(models.Model):
    user = models.OneToOneField(User)
    department = models.CharField(max_length=200, default='Computer Science')
    is_teacher = models.BooleanField(default=False)
    is_student = models.BooleanField(default=True)
    # .. etc. etc.

我跟随Django 1.7(也适用于1.6)的一种方法是继承AbstractUser

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

class User(AbstractUser):
    balance = models.DecimalField(default=0.0, decimal_places=2, max_digits=5)

要使用您的模型,您需要将其settings.pysettings.py用于身份验证的模型:

AUTH_USER_MODEL = 'your_app.User'

另请注意,在模型中的关系中引用新User模型时,您现在必须使用settings.AUTH_USER_MODEL

from django.db import models
from django.conf import settings

class Transaction(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL) # ForeignKey(User) will not work

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM