2010-07-07 1 views
0

Я работаю над интеграцией приложения django с facebook, и я сделал почти, но я хочу дать пользователю возможность выбрать его/ее имя пользователя после того, как он/она успешно вошли в систему facebook на моем сайте Джанго здесь есть код:Facitiy для выбора имени пользователя после подключения facebook к приложению django

форма для usename:

класс RegisterUsernameForm (forms.Form):

username = forms.RegexField(regex=r'^\w+$', 
          max_length=30, 
          widget=forms.TextInput(attrs=attrs_dict), 
          label=_(u'username')) 

def clean_username(self): 
    """ 
    Validate that the username is alphanumeric and is not already 
    in use. 

    """ 
    try: 
     user = User.objects.get(username__iexact=self.cleaned_data['username']) 
    except User.DoesNotExist: 
     return self.cleaned_data['username'] 
    raise forms.ValidationError(_(u'This username is already taken. Please choose another.')) 

сделал шаблон против него, а также

здесь вид, который я использовал для использования с

четкости register_username (запрос, form_class = RegisterUsernameForm, template_name = 'регистрация/register_username_form.html', extra_context = None):

if request.method == 'POST': 
     form = form_class(data=request.POST, files=request.FILES) 
     if form.is_valid(): 
      username = form['username'].data 
      return HttpResponseRedirect(reverse('facebook_settings')) 
    else: 
     form = form_class() 

    if extra_context is None: 
      extra_context = {} 
    context = RequestContext(request) 
    for key, value in extra_context.items(): 
     context[key] = callable(value) and value() or value 
    return render_to_response(template_name, 
          { 'form': form }, 
          context_instance=context) 

, в котором я просто получаю имя пользователя от ...

У меня есть один fb_authenticate в моем приложении django, в котором я проверяю, существует ли пользователь в моем db или нет, если нет, то создайте новый в тот момент мне нужно время переадресовать эту форму «имя пользователя», которое я упоминал выше. так что пользователь может выбрать его, а затем зарегистрирует его в dgango приложение

класс FbBackend:

def fb_authenticate(self, request, facebook_id=None): 
    if not facebook_id: return None 
    try: 
     profile = UserProfile.objects.get(facebook_id=facebook_id) 

     #To Check whether the same user is loggin in to facebook if not then logout the perivous one and login new one. 
     if request.user != profile.user : 
      from django.contrib.auth import logout 
      logout(request) 
      request.user=profile.user 

     UpdateFbUserDetails(request, profile.user, facebook_id) 
     return profile.user 
    except UserProfile.DoesNotExist: 
     # No user. Create one. 
     pass 

    #Get user facebook account details like first name, last name and email address. 
    username = request.facebook.users.getInfo([request.facebook.uid], ['name'])[0]['name'] 
    firstname = request.facebook.users.getInfo([request.facebook.uid], ['first_name'])[0]['first_name'] 
    lastname = request.facebook.users.getInfo([request.facebook.uid], ['last_name'])[0]['last_name'] 
    emailaddress = request.facebook.users.getInfo([request.facebook.uid], ['email'])[0]['email'] 

    # Create the username for facebook logged in user 
    fbusername = (emailaddress.rsplit ('@')[0]).replace ('.','') + "_"+((emailaddress.rsplit ('@')[1])[0]).capitalize() 


    try: 
     user = User.objects.get(email=emailaddress) 
     # This shouldn't really happen. Log an error. 
     # logging.error('Strange: user %s already exists.' % username) 
    except User.DoesNotExist: 
     user = User.objects.create_user(fbusername,emailaddress,'xxxx')#('fb_%s' % facebook_id, '') 
     user.first_name = firstname 
     user.last_name = lastname 

    if not UpdateFbUserDetails(request, user, facebook_id): 
     return None 
    user.save() 
    profile, created = UserProfile.objects.get_or_create(user=user) 
    profile.facebook_id = facebook_id 
    new_basics_info = UserBasicInfo() 
    new_basics_info.full_name = username 
    new_basics_info.save() 
    profile.basics_info = new_basics_info 
    new_personal_info = UserPersonalInfo() 
    new_personal_info.save() 
    profile.personal_info = new_personal_info 
    profile.save() 
    return user 

Пожалуйста, помогите мне, как я могу достигнуть этого ......

Благодарности

Ansh J

ответ

0

Я его решил ....

Я просто поместил весь сберегательный код in view file после:

if form.is_valid(): и когда пользователь вошел в систему. Я перехожу к нему на эту страницу, и когда он выбирает join, он будет зарегистрирован в моем приложении django.

 Смежные вопросы

  • Нет связанных вопросов^_^