Форум сайта python.su
Добрый день, уважаемые питонисты! Столкнулся с небольшой проблемой, требуется ваша помощь. Пишу бложек, для авторизации через соц. сети использую uLogin. Сам модуль установил, настроел работает все корректно, пользователи создаются, логинятся - красота. Теперь иду дальше, хочу заполнять данные в таблице UserInfo из профиля пользователя в социалочке. Использовал модель из демо-проекта:
from django.db import models from django.core.files.base import ContentFile from django_ulogin.models import ULoginUser from django_ulogin.signals import assign import datetime import os import requests ULOGIN_FIELDS = ['first_name', 'last_name', 'sex', 'email'] ULOGIN_OPTIONAL = ['photo', 'photo_big', 'city', 'country', 'bdate'] class UserInfo(models.Model): SEX_FEMALE = 1 SEX_MALE = 2 def upload_photo(self, filename): return 'avatars/{network}/{uid}/{file}'.format(network=self.ulogin.network, uid=self.ulogin.uid, file=os.path.basename(filename)) def upload_photo_big(self, filename): return 'photos/{network}/{uid}/{file}'.format(network=self.ulogin.network, uid=self.ulogin.uid, file=os.path.basename(filename)) ulogin = models.ForeignKey(ULoginUser) sex = models.IntegerField(blank=True, null=True, choices = ( (SEX_MALE, 'male'), (SEX_FEMALE, 'female'), )) photo = models.ImageField(null=True, blank=True, upload_to=upload_photo) photo_big = models.ImageField(null=True, blank=True, upload_to=upload_photo_big) city = models.CharField(blank=True, default='', max_length=255) country = models.CharField(blank=True, default='', max_length=255) bdate = models.DateField(verbose_name='Birthday', blank=True, null=True) def catch_ulogin_signal(*args, **kwargs): user = kwargs['user'] json = kwargs['ulogin_data'] ulogin = kwargs['ulogin_user'] if kwargs['registered']: user.first_name = json['first_name'] user.last_name = json['last_name'] user.email = json['email'] user.save() data = {'ulogin': ulogin} for fld in ['sex', 'city', 'country']: if fld not in json: return data[fld] = json[fld] if 'bdate' in json and json['bdate']: d, m, y = json['bdate'].split('.') data['bdate'] = datetime.datetime(int(y), int(m), int(d)) userinfo = UserInfo.objects.create(**data) for fld in ['photo', 'photo_big']: if fld not in json: continue getattr(userinfo, fld).save(os.path.basename(json[fld]), ContentFile(requests.get(json[fld]).raw.read())) userinfo.save() assign.connect(catch_ulogin_signal, sender=ULoginUser, dispatch_uid='loginsys.models')
Отредактировано HomoAlbus (Май 2, 2014 19:46:20)
Офлайн
HomoAlbusлучше уже openid + oauth2
для авторизации через соц. сети использую uLogin.
Офлайн
Singularity
Офлайн
HomoAlbus
ну если он такой простой, то почему у ты задал этот вопрос ?
Офлайн