这里是@pennersr解决一个具体的例子:
Assumming您的个人资料模型有这3个领域:first_name
,email
,picture_url
views.py:
@receiver(user_signed_up)
def populate_profile(sociallogin, user, **kwargs):
if sociallogin.account.provider == 'facebook':
user_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
picture_url = "http://graph.facebook.com/" + sociallogin.account.uid + "/picture?type=large"
email = user_data['email']
first_name = user_data['first_name']
if sociallogin.account.provider == 'linkedin':
user_data = user.socialaccount_set.filter(provider='linkedin')[0].extra_data
picture_url = user_data['picture-urls']['picture-url']
email = user_data['email-address']
first_name = user_data['first-name']
if sociallogin.account.provider == 'twitter':
user_data = user.socialaccount_set.filter(provider='twitter')[0].extra_data
picture_url = user_data['profile_image_url']
picture_url = picture_url.rsplit("_", 1)[0] + "." + picture_url.rsplit(".", 1)[1]
email = user_data['email']
first_name = user_data['name'].split()[0]
user.profile.avatar_url = picture_url
user.profile.email_address = email
user.profile.first_name = first_name
user.profile.save()
如果你感到困惑中的每个供应商的picture_url
变量。然后看看文档:
Facebook的:
picture_url = "http://graph.facebook.com/" + sociallogin.account.uid + "/picture?type=large"
Docs
LinkedIn:
picture_url = user_data['picture-urls']['picture-url']
Docs
叽叽喳喳:
picture_url = picture_url.rsplit("_", 1)[0] + "." + picture_url.rsplit(".", 1)[1]
Docs而为rsplit()
看看here
希望有所帮助。 :)
我不得不这样用它:kwargs.get('user')。socialaccount_set.filter(provider ='facebook')。extra_data但是当我这样做时,我得到这个错误:AttributeError at/accounts/facebook/login/callback/ 'QuerySet'对象没有属性'extra_data'谢谢你的回答!你的应用真棒 –
糟糕,我的例子是错误的(我刚纠正它)。我忘了从查询集([0])中选择一个项目,如下所示:“.filter(...)[0] ...” – pennersr
工作正常!非常感谢! –