我想创建一个没有登录的用户子集...基本上作为一种方式来添加一个摄影师字段照片,而没有一个完整的帐户关联该人(因为在很多情况下,他们永远不会真正登录到该网站)。需要注意的是,我还希望能够在稍后为其启用帐户。Django UserProfile ...没有密码
所以,我认为这个问题变成什么是建立一个与User表关联的“People”表的最佳方式,而实际上并没有用UserProfile扩展User表。
我想创建一个没有登录的用户子集...基本上作为一种方式来添加一个摄影师字段照片,而没有一个完整的帐户关联该人(因为在很多情况下,他们永远不会真正登录到该网站)。需要注意的是,我还希望能够在稍后为其启用帐户。Django UserProfile ...没有密码
所以,我认为这个问题变成什么是建立一个与User表关联的“People”表的最佳方式,而实际上并没有用UserProfile扩展User表。
一个user profile(由django.contrib.auth.models.User.get_profile
返回)不会延长用户表 - 指定为与AUTH_PROFILE_MODULE
设置轮廓模型的模型只是一个具有ForeignKey
到User
模型。 get_profile
和设置实际上只是一个便捷的API,用于访问具有ForeignKey
到特定User
实例的特定模型的实例。
因此,一个选择是创建其中ForeignKey
到User
可以null
和你Photo
模型,这个剖面模型,而不是User
模型相关联轮廓模型。这将允许您为不存在的用户创建配置文件,并在以后将注册用户附加到配置文件。
从关于django auth的文档中,如果您要使用用户模型,则必须拥有用户名和密码,并且不存在“匿名帐户”。我想你可以使用默认密码创建帐户,然后让人们有机会启用“真实”帐户(通过自己设置密码)。
要建立一个“人物”表是关系到用户表,你只需要使用一个ForeignKey字段(这实际上增加额外的信息到用户模式的recommended way,而不是继承)
的用户此无法登录?给他们一个完全随机的密码。
import random
user.set_password(str(random.random()))
他们永远无法登录。
为什么-1?它看起来是一个有效答案。 – 2013-06-24 18:29:21
使用model with a ForeignKey field linking to User可能无法正常工作,因为您需要匿名访问。我不确定这是否会起作用,但您可以尝试如果您将外键设置为AnonymousUser(其ID始终为None!),那么可以尝试执行什么操作。
如果你尝试它,在这里发布你的结果,我会很好奇。
提供您自己的验证例程,然后您可以检查(或不检查)任何你喜欢的东西。我们这样做,所以如果他们在正常的用户名失败,我们也可以让他们在电子邮件/密码(虽然这不是我在下面显示)。
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'userprofile.my_authenticate.MyLoginBackend', # if they fail the normal test
)
在USERPROFILE
/my_authenticate.py:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class MyLoginBackend(ModelBackend):
"""Return User record if username + (some test) is valid.
Return None if no match.
"""
def authenticate(self, username=None, password=None, request=None):
try:
user = User.objects.get(username=username)
# plus any other test of User/UserProfile, etc.
return user # indicates success
except User.DoesNotExist:
return None
# authenticate
# class MyLoginBackend
的django.contrib.auth.models.User用于使用缺省认证后端的目的单独存在
在settings.py(数据库为基础的)。如果你写自己的后端,你可以使一些帐户无密码,同时保持帐户的密码正常。 Django文档有chapter on this。
insin's answer的另一个赞成通过UserProfile
处理此问题。 James Bennett有关于延伸django.contrib.auth.models.User
的great article。他走过几个方法,解释他们的优点和缺点,并以UserProfile
的方式登陆为理想。
而不是创建此配置文件模型仅用于具有foreignkey(User,null = True)的目的,为什么不把外键放在Photo模型上? – mklauber 2011-07-07 21:06:34