2011-10-25 13 views

Odpowiedz

27

Nie ma innej drogi niż "programowo". Oczywiście jest to documented.

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

Re Twój komentarz rewizyjnej: [PEP 8] (http://www.python.org/dev/peps/pep-0008/#other-recommendations) zaleca pomijając spacje wokół ' = 'w argumentach słów kluczowych, ale oczywiście możesz robić co chcesz. – icktoofay

+1

@icktoofay Jestem świadomy tego, co zaleca PEP 8. (To nie jest dobra rekomendacja) –

+2

@CatPlusPlus Naprawdę uważasz, że jest to zła rekomendacja? To dziwne z twojej strony. – jdg

5

zawsze dostawaliśmy być ostrożnym przy programowo logowania użytkowników w, można dostać ten błąd "user has no attribute "backend". Musisz też ustawić backend, jeśli nie było to wcześniej. Project that uses this a niektóre przykładowy kod:

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/') 
Powiązane problemy