2

我正在创建一个 SAAS 作为一个项目,并且似乎无法将我的恐龙大脑包裹在这个身份验证系统周围。在我意识到您可以添加到正常的身份验证系统之前,我开始推出自己的系统。这是完全错误的吗?我是否应该以某种方式扩展 User 模型但仍包含我自己的所有属性(用户名、密码等)?

from django.db import models
from django.contrib.auth.models import User
from annoying.fields import AutoOneToOneField
from myproject.core.modelfields import LowerAlphanumericField
from myproject.apps.account.models import Account

class Administrator(models.Model):
    """
    Administrator for an Account (application holds multiple accounts as it is a SAAS).
    """
    account = models.ForeignKey(Account)
    user = AutoOneToOneField(User, primary_key=True)
    name = models.CharField(max_length=255)
    email = models.EmailField()
    username = LowerAlphanumericField(max_length=30)
    password = models.CharField(max_length=255)

如果我访问http://127.0.0.1:8080/admin/auth/user/3/我会收到一个错误,但是我创建的第三个管理员对象的主键是 3 (假设是主键相关的用户对象。我错过了什么。另外,我是否需要创建一个密码字段,以及这里的所有垃圾,或者我应该?

4

2 回答 2

4

在我看来,您实际上并不需要添加那么多额外信息。Django auth 涵盖了您正在寻找的所有方面:

  • 用户名
  • 密码(sha1 哈希)
  • 电子邮件

并且 Django auth 也有一个相当有用的权限系统:

  • 超级用户
  • 职员
  • 积极的

每当我希望向用户对象添加额外信息时,我通常会创建一个新模型并存储对用户的引用。

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    # Extra functionality

然后按照@bste 的建议,添加AUTH_PROFILE_MODULE = 'accounts.UserProfile'到您的设置文件中。get_profile()这允许您使用任何User对象上的方法访问用户配置文件(您的额外信息) 。

于 2010-02-19T13:56:37.563 回答
2

你已经在使用内置的django 身份验证了吗?如果是,那么您可以指定与 User 模型相关的模型,您可以在其中存储有关用户的其他信息。它在这里解释:http: //docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

添加以下行很简单:

AUTH_PROFILE_MODULE = 'accounts.Adminstrator'

无需自己存储密码,我认为 django 会这样做

于 2010-02-19T00:58:21.190 回答