2008-10-05 30 views
3

我想创建一个没有登录的用户子集...基本上作为一种方式来添加一个摄影师字段照片,而没有一个完整的帐户关联该人(因为在很多情况下,他们永远不会真正登录到该网站)。需要注意的是,我还希望能够在稍后为其启用帐户。Django UserProfile ...没有密码

所以,我认为这个问题变成什么是建立一个与User表关联的“People”表的最佳方式,而实际上并没有用UserProfile扩展User表。

回答

7

一个user profile(由django.contrib.auth.models.User.get_profile返回)不会延长用户表 - 指定为与​​AUTH_PROFILE_MODULE设置轮廓模型的模型只是一个具有ForeignKeyUser模型。 get_profile和设置实际上只是一个便捷的API,用于访问具有ForeignKey到特定User实例的特定模型的实例。

因此,一个选择是创建其中ForeignKeyUser可以null和你Photo模型,这个剖面模型,而不是User模型相关联轮廓模型。这将允许您为不存在的用户创建配置文件,并在以后将注册用户附加到配置文件。

+0

而不是创建此配置文件模型仅用于具有foreignkey(User,null = True)的目的,为什么不把外键放在Photo模型上? – mklauber 2011-07-07 21:06:34

0

从关于django auth的文档中,如果您要使用用户模型,则必须拥有用户名和密码,并且不存在“匿名帐户”。我想你可以使用默认密码创建帐户,然后让人们有机会启用“真实”帐户(通过自己设置密码)。

要建立一个“人物”表是关系到用户表,你只需要使用一个ForeignKey字段(这实际上增加额外的信息到用户模式的recommended way,而不是继承)

3

的用户此无法登录?给他们一个完全随机的密码。

import random 
user.set_password(str(random.random())) 

他们永远无法登录。

+0

为什么-1?它看起来是一个有效答案。 – 2013-06-24 18:29:21

0

使用model with a ForeignKey field linking to User可能无法正常工作,因为您需要匿名访问。我不确定这是否会起作用,但您可以尝试如果您将外键设置为AnonymousUser(其ID始终为None!),那么可以尝试执行什么操作。

如果你尝试它,在这里发布你的结果,我会很好奇。

3

提供您自己的验证例程,然后您可以检查(或不检查)任何你喜欢的东西。我们这样做,所以如果他们在正常的用户名失败,我们也可以让他们在电子邮件/密码(虽然这不是我在下面显示)。

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 
0

的django.contrib.auth.models.User用于使用缺省认证后端的目的单独存在

在settings.py

(数据库为基础的)。如果你写自己的后端,你可以使一些帐户无密码,同时保持帐户的密码正常。 Django文档有chapter on this