2011-10-25 16 views

Respuesta

27

No hay otra manera que "programáticamente". Por supuesto, esto es documented.

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

Re tu comentario revisión: [PEP 8] (http://www.python.org/dev/peps/pep-0008/#other-recommendations) recomienda omitiendo espacios alrededor ' = 'en argumentos de palabra clave, pero por supuesto eres libre de hacer lo que quieras. – icktoofay

+1

@icktoofay Estoy muy al tanto de lo que recomienda PEP 8. (No es una buena recomendación) –

+2

@CatPlusPlus ¿De verdad crees que es una mala recomendación? Eso es extraño de ti. – jdg

5

alsways que tenga cuidado al registro de usuarios mediante programación en, puede obtener el error 'user has no attribute "backend". También debe configurar el back-end si eso no sucedió anteriormente. Project that uses this y un código de ejemplo:

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/') 
Cuestiones relacionadas