2008-10-05 75 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