我想創建一個沒有登錄的用戶子集...基本上作爲一種方式來添加一個攝影師字段照片,而沒有一個完整的帳戶關聯該人(因爲在很多情況下,他們永遠不會真正登錄到該網站)。需要注意的是,我還希望能夠在稍後爲其啓用帳戶。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