2010-07-07 25 views
0

我正在將django應用程序與facebook進行整合,並且我做了差不多的工作,但我想給用戶在他/她成功登錄後選擇他/她的用戶名Facebook的在我的Django的網站這裏是代碼:在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.')) 

做出了模板反對以及

這裏是我曾經使用從

DEF register_username(請求,form_class = RegisterUsernameForm, TEMPLATE_NAME = '註冊/ register_username_form.html', extra_context中用=無)的視圖:

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應用程序中,我檢查用戶是否存在於我的數據庫或不,然後創建新的一個在那個點我需要的時間重定向,形成「用戶名」,我已經提到過了。因此用戶可以選擇它,然後將記錄他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

我已經解決了....

我只是把所有的保存碼在查看文件後:

如果form.is_valid(): 和何時用戶登錄我導航到該頁面,當他選擇加入然後將在我的django應用程序中註冊。

相關問題