Allauth Facebook个人资料图片未加载

时间:2014-02-12 16:23:27

标签: python django facebook django-allauth

我知道这是一个经常出现的问题,所以请原谅我再次提问(这真的不是缺乏研究),我似乎无法找到使用Allauth加载Facebook Profile Picture的方法。

我已经使用http://www.sarahhagstrom.com/2013/09/the-missing-django-allauth-tutorial/获得了一些提示,它们都运行良好,但是对于Facebook Profile Picture似乎缺少了什么,models.py上负责传递Facebook Profile Picture的URL的代码无法获取Facebook用户ID

在下面的代码中......

      http://graph.facebook.com/{}/picture?width=40&height=40

...我尝试过使用fb_uid和user_id,但仍然无法加载。

在模板上调用配置文件URL:

      {% if request.user.is_authenticated %}
             <img src="{{ request.user.profile.profile_image_url }}"/>
      {% endif %}

此处建议{Pennerr How can I get the user's facebook id with django-allauth?也不允许我访问用户ID。

谢谢

1 个答案:

答案 0 :(得分:2)

facebook api不允许直接访问图像,您必须编写代码以将Facebook个人资料网址的响应下载到您的服务器并使用您的图像副本。

上面的代码为您提供了facebook重定向到其存储空间的URL,因此请使用

url = "http://graph.facebook.com/%s/picture?type=large" % response['id']
avatar = urlopen(url)
profile = user.get_profile()
profile.profile_photo.save(slugify(user.username + " social") + '.jpg', 
                        ContentFile(avatar.read()))              
profile.save()

但不推荐这种方法,因为它会导致响应延迟,有些人建议芹菜后台任务下载图像,所以也要考虑一下。