2011-05-16 25 views
5

Estoy intentando crear una página de inicio de sesión y de cierre de sesión con django. El problema que tengo es que cuando envío el formulario, no va a la URL que especifiqué. Cuando hago clic en el botón de inicio de sesión, quiero que vaya al http://127.0.0.1:8000/home/, pero en su lugar va al http://127.0.0.1:8000/?next=/home/.Django iniciar sesión/cerrar sesión

A continuación es mi código de la conexión/desconexión en mi view.py:

def login(request): 
    def errorHandler(error): 
    return render_to_response('login.html', {'error' : error}) 
    if request.method == 'POST': 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username = username, password = password) 
     if user is not None: 
      if user.is_active: 
       authLogin(request, user) 
       fullName = user.get_full_name 
       return render_to_response('logged_in.html', {'full_name': fullName}) 
      else: 
       error = 'Account disabled.' 
     return errorHandler(error) 
     else: 
      error = 'Invalid details entered.' 
     return errorHandler(error) 

    return render_to_response('login.html') 

@login_required 
def logout(request): 
    authLogout(request) 
    return render_to_response('logged_in.html') 

mi login.html:

{% extends "base.html" %} 

{% block content %} 

    {% if error %} 
    <p><b><font color="red">Error: </font></b>{{ error }}</p> 
    {% endif %} 

    <form action="/home/" method="post"> 
    <label for="username">User name:</label> 
    <input type="text" name="username" value="" id="username"> 
    <label for="password">Password:</label> 
    <input type="password" name="password" value="" id="password"> 

    <input type="submit" value="Login" /> 
    <input type="hidden" name="next" value="{{ next|escape }}" /> 
    </form> 

{% endblock %} 

mi logged_in.html:

{% extends "base.html" %} 

{% block name %}{{ full_name }} is {% endblock %} 

{% block content %} 
    <p><a href='/'>Logout</a></p> 
{% endblock %} 

url:

(r'^$', 'myapp.views.login'), 
(r'^home/$', 'myapp.views.logout'), 

Por favor, ayudar a

Respuesta

2

El problema es que en realidad no se conecte el usuario, envía el formulario de usuario no autenticado /home/, que no puede procesar, porque requiere iniciar sesión. :-) Por lo tanto, redirige al usuario a la vista de inicio de sesión, almacenando el destino en el parámetro next.

Solución: <form action="" method="post">

+0

que funciona. Sin embargo, dado que todavía es http://127.0.0.1:8000 (no cambia la URL), en realidad no utiliza la vista de cierre de sesión. Simplemente va a esa página. (la vista de cierre de sesión está establecida en/home /) – tester

+0

'LOGIN_REDIRECT_URL = '/ home /'' en settings.py – DrTyrsa

+0

He intentado esto antes, pero la url sigue siendo 127.0.0.1:8000. ¿Debo especificar la URL de redirección en mi vista? o podría tener algo que ver con render_to_response? He intentado con HttpResponseRedirect, pero necesito que el contenido pase a la plantilla como puede ver en mi código actualmente. – tester

Cuestiones relacionadas