मुझे जल्दी से वर्णित करने दें कि मैंने यह कैसे किया (all_auth और rest_auth का उपयोग करके)।
Basically, 'allauth => socialaccount' provide user_signed_up and user_logged_in signals. So you need to catch them and get sociallogin object's extra data and populate your avatar_url.
चरण -1: एक UserProfile मॉडल बनाएं: (दुकान avatar_url को)
#models.py
try:
from django.utils.encoding import force_text
except ImportError:
from django.utils.encoding import force_unicode as force_text
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True, verbose_name='user', related_name='profile')
avatar_url = models.CharField(max_length=256, blank=True, null=True)
def __str__(self):
return force_text(self.user.email)
class Meta():
db_table = 'user_profile'
चरण -2: पकड़ने संकेत 'user_signed_up' और `avatar_url '
# signals.py
from allauth.account.signals import user_signed_up, user_logged_in
@receiver(user_signed_up)
def social_login_fname_lname_profilepic(sociallogin, user):
preferred_avatar_size_pixels=256
picture_url = "http://www.gravatar.com/avatar/{0}?s={1}".format(
hashlib.md5(user.email.encode('UTF-8')).hexdigest(),
preferred_avatar_size_pixels
)
if sociallogin:
# Extract first/last names from social nets and store on User record
if sociallogin.account.provider == 'twitter':
name = sociallogin.account.extra_data['name']
user.first_name = name.split()[0]
user.last_name = name.split()[1]
if sociallogin.account.provider == 'facebook':
f_name = sociallogin.account.extra_data['first_name']
l_name = sociallogin.account.extra_data['last_name']
if f_name:
user.first_name = f_name
if l_name:
user.last_name = l_name
#verified = sociallogin.account.extra_data['verified']
picture_url = "http://graph.facebook.com/{0}/picture?width={1}&height={1}".format(
sociallogin.account.uid, preferred_avatar_size_pixels)
if sociallogin.account.provider == 'google':
f_name = sociallogin.account.extra_data['given_name']
l_name = sociallogin.account.extra_data['family_name']
if f_name:
user.first_name = f_name
if l_name:
user.last_name = l_name
#verified = sociallogin.account.extra_data['verified_email']
picture_url = sociallogin.account.extra_data['picture']
user.save()
profile = UserProfile(user=user, avatar_url=picture_url)
profile.save()
आशा पॉप्युलेट यह आपकी मदद करेगा।
स्रोत
2016-11-09 01:10:00
कोई विचार है कि उनको कैश कैसे करें? जब भी पेज लोड होता है तो उन्हें रीयलटाइम में कॉल करना महंगा होगा .. –
@ ÖzerS। क्या आप विस्तार से बता सकते हैं? यह महंगा कैसे है? क्या उन्हें अपने सर्वर पर कैश करने के लिए और अधिक महंगा नहीं होगा, तो बस फेसबुक सर्वर वितरित करें? – Daggepagge
@Daggepagge हर बार जब कोई इस पृष्ठ का उपयोग करता है जो इस स्निपेट का उपयोग करता है, तो आपका सर्वर फेसबुक से संपर्क करेगा और डेटा प्राप्त करेगा। आमतौर पर यह एक सेकंड या तो लेता है, इसलिए आपका पृष्ठ तब तक प्रस्तुत नहीं करेगा जब तक कि डेटा प्राप्त न हो (अगर AJAX नहीं है)। कैशिंग ने केवल यूआरएल को एक बार संग्रहीत किया और सीधे अपने सर्वर से इसे वापस ले लिया, 1 सेकंड देरी छोड़कर आपको फेसबुक से संपर्क करने की आवश्यकता होगी। –