2011-10-25 41 views

回答

27

沒有其他方式比「編程」。當然,這是documented

from django.contrib.auth import authenticate, login 
user = authenticate(username = username, password = password) 
if user is not None: 
    login(request, user) 
+6

重新修訂版本評論:PEP 8](http://www.python.org/dev/peps/pep-0008/#other-recommendations)建議各地省略空間' ='在關鍵字參數中,但當然你可以自由地做任何你想做的事情。 – icktoofay

+1

@icktoofay我很清楚PEP 8的建議。 (這不是一個好的建議) –

+2

@CatPlusPlus你真的認爲它是一個不好的建議嗎?這很奇怪你。 – jdg

5

Alsways時要小心編程登錄用戶,你可能會得到錯誤'user has no attribute "backend"。如果以前沒有發生過,則必須設置後端。 Project that uses this和一些示例代碼:

def splash_register(request): 
    if request.session.get('beta'): 

    if request.method=='POST': 
     userform=MyUserCreationForm(request.POST) 
     if userform.is_valid(): 
      #username of <30 char is required by Django User model. I'm storing username as a hash of user email 

      user=userform.save(commit=False) 
      user.username=hash(user.email) 
      user.backend='django.contrib.auth.backends.ModelBackend' 
      user.save() 


      username=user.username 
      password=str(userform.cleaned_data['password']) 
      auth.login(request, user) 
      request.session['first_visit']=True 
      return HttpResponseRedirect("/") 
     else: 
      userform=MyUserCreationForm(request.POST) 
      return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request)) 
    return render_to_response("website/splash_register.html", context_instance=RequestContext(request))  
else: 
    return HttpResponseRedirect('/splash/') 
相關問題