Django:失去理智,用Django auth拉出我的头发

时间:2010-02-19 00:32:43

标签: django django-authentication

我正在创建一个SAAS作为一个项目,似乎无法将我的恐龙脑包裹在这个身份验证系统中。在我意识到你可以添加到普通的auth系统之前,我开始推出自己的系统。这完全错了吗?我应该以某种方式扩展用户模型,但仍然包括我自己的所有属性(用户名,密码等)?

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(其中一个假设是相关User对象的主键。我错过了什么。另外,我需要创建一个密码字段,以及所有那些垃圾,或者我应该吗?

2 个答案:

答案 0 :(得分:4)

它告诉我你真的不需要添加那么多额外的信息。 Django auth涵盖了您正在寻找的所有方面:

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

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

  • 超级用户
  • 人员
  • 活性

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

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

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

答案 1 :(得分:2)

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

添加以下行很简单:

AUTH_PROFILE_MODULE = 'accounts.Adminstrator'

没有必要自己存储passwrd,我认为django会这样做