我正在创建一个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对象的主键。我错过了什么。另外,我需要创建一个密码字段,以及所有那些垃圾,或者我应该吗?
答案 0 :(得分:4)
它告诉我你真的不需要添加那么多额外的信息。 Django auth涵盖了您正在寻找的所有方面:
和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会这样做