0

[Django的1.5.1]Django的 - 與集成Django的配置文件(以及Django的登記)的Django Facebook的

我已經設置了django-profilesdjango-registration我在涉及到「自定義」的方式小網站註冊後端,以便在註冊期間,新用戶一次填寫其用戶名,密碼和配置文件字段。但我現在試圖讓用戶使用Facebook登錄並嘗試使用django-facebook。據我所知,登錄通過django-facebook的Facebook登錄將驗證某人,但這不會創建一個用戶對象或配置文件對象。

因此,我想到的想法是添加一個額外的配置文件字段,如果他們想使用Facebook,該字段會保存用戶的潛在Facebook ID(我相信這是唯一的)。然後,如果用戶有配置文件,則強制檢查每個模板,如果沒有,則將其引導至「創建配置文件」頁面。然後,無論用戶何時通過Facebook登錄登錄,它都會以某種方式將其會話與相應的與Facebook ID相匹配的配置文件對象(以及與該配置文件對象相對應的用戶對象)相關聯。我想我必須應用一個過濾器,然後創建一個'信號',但我不太確定如何做到這一點。

雖然這聽起來很複雜。我怎樣才能以正確的方式完成這項工作?

回答

0

下面是我建議你做的事情。去掉django-facebook並查看django-allauth。它會處理帳戶(註冊,邏輯,連接社交帳戶)。

此外,django-profiles對於我來說有1.5+的問題,我不打擾它,而是創建我自己的配置文件應用程序和UserProfile模型,其中任何其他字段都不會由django-allauth處理。

從我實現

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    default_address = models.OneToOneField(Address, blank=True, null=True) 
    default_tshirt_size = models.CharField(blank=True, null=True, choices=constants.tshirt_sizes, max_length=50) 
    default_shoe_size = models.CharField(blank=True, null=True, choices=constants.shoe_sizes, max_length=50) 

用戶配置文件模型應該使用被指向相同的用戶模型allauth的一個例子。

from allauth.utils import get_user_model 
User = get_user_model() 

這是我用來創建用戶的配置文件,如果它還沒有的整潔的方法。

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 

然後,只需用save()方法創建一個註冊表單類,該方法將用戶作爲參數。鏈接到你的設置文件中的這個類。

ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm' 

見這個帖子上的有些相關的例子,當然除了你實現你可能會希望基於該點的user.id,以獲得用戶配置,以及額外的值保存到配置文件實例。

How to customize user profile when using django-allauth

+0

非常感謝您的回覆!我想我可以看看django-allauth,但我的網站已經有一些現有的用戶,我已經設置了我的自定義userprofiles類與django配置文件和Django註冊...是否仍然有一些非 - 凌亂的方式讓我整合Facebook與Django-Allauth?再次感謝! – Stylex