Reputation: 22489
I am using from social_auth.signals import socialauth_registered
for new registered user in my project. and I have noticed that when I try to sign-up on facebook to my project. my project did not get the profile pic of my facebook, instead it gets the profile pic of my gravatar.com
account.
this is my code :
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)
but my code did not work on saving the facebook profile pic to `media/mudshots/ dir.
my question is, how can I get the profile pic of a facebook account and save it in media/mudshots/
dir in my django project?
can anyone can help me about my case?
thanks in advance ..
Upvotes: 1
Views: 3604
Reputation: 22489
i get it... i use this ..
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()
Upvotes: 1