繁体   English   中英

django-social-auth:如何获取facebook的个人资料图片并将其保存在media / mudshots /文件夹中

[英]django-social-auth : how to get the profile pic of facebook and save it in media/mudshots/ folder

我正在使用from social_auth.signals import socialauth_registered为项目中的新注册用户。 我注意到当我尝试在Facebook上注册到我的项目时。 我的项目没有获取我的facebook的个人资料照片,而是获取了我的gravatar.com帐户的个人资料照片。

这是我的代码:

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from userena.models import *
from social_auth.signals import pre_update
from social_auth.backends.facebook import FacebookBackend
from social_auth.backends import google
from social_auth.signals import socialauth_registered
import datetime

def new_users_handler(sender, user, response, details, **kwargs):
    user.is_new = True
    print "hello"
    if user.is_new:
        print "world"
        if "id" in response:
            print "police"
            from urllib2 import urlopen, HTTPError
            from django.template.defaultfilters import slugify
            from django.core.files.base import ContentFile

            try:
                url = None
                if sender == FacebookBackend:
                    url = "http://graph.facebook.com/%s/picture?type=large" \
                                % response["id"]
                elif sender == google.GoogleOAuth2Backend and "picture" in response:
                    url = response["picture"]

                print url
                if url:
                    avatar = urlopen(url)
                    #profile = UserProfile(user=user)
                    print "again"
                    print user
                    fileName = "media/mugshots/"+ str(user) + ".jpg"
                    print "okss"
                    print fileName

                    try:
                        profile = Profile.objects.get(user=user)
                    except:
                        profile = Profile.objects.create(user=user)                

                    localFile = open(fileName, 'w')
                    localFile.write(avatar.read())
                    localFile.close()
                    profile.mugshot = fileName
                    print "save=ing profile"
                    #profile.mugshot.save(slugify(user.username + " social") + '.jpg', 
                    #       ContentFile(avatar.read()))              

                    profile.save()

            except HTTPError:
                pass

    return False

socialauth_registered.connect(new_users_handler, sender=None)

但是我的代码无法将Facebook个人资料图片保存到`media / mudshots / dir。

我的问题是,如何获取facebook帐户的个人资料图片并将其保存在django项目中的media/mudshots/ dir中?

谁能帮助我解决我的案件?

提前致谢 ..

我明白了...我用这个..

import datetime
import urllib
import string
import random
import os
avatar = urlopen(url)

try:
    profile = Profile.objects.get(user=user)
except:
    profile = Profile.objects.create(user=user)

print profile
print "sdfffffffffffffffffffff"
filename_charset = string.ascii_letters + string.digits
filename_length = 10
file_save_dir = 'media/mugshots/'

filename = ''.join(random.choice(filename_charset)
                   for s in range(filename_length))

urllib.urlretrieve (url, os.path.join(file_save_dir, filename + '.png'))

profile.mugshot = 'mugshots/'+filename + '.png'


profile.save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM