2012-06-28 8 views
13

me gustaría utilizar la función de cierre de sesión de Django, pero no está seguro de cómo usarlo properly.I hemos referido a este Django Authenication usuario: https://docs.djangoproject.com/en/dev/topics/auth/ y se leedjango.contrib.auth.logout en Django

from django.contrib.auth import logout 

def logout_view(request): 
    logout(request) 
    # Redirect to a success page. 

La parte más confusa para mí es la # redirección a una página de éxito. ¿Cómo lo redirecciono a otra página? ¿Debo usar HttpResponseRedirect o agregar argumentos adicionales para cerrar la sesión (solicitud)? No estoy seguro de qué hacer. Necesito orientación.

Respuesta

10

Mire la fuente del método de cierre de sesión, debería darle una idea clara de lo que está sucediendo. Se pueden añadir argumentos adicionales para el método de cierre de sesión para manejar la reorientación, pero también se puede añadir después de que el método para un comportamiento personalizado

def logout(request, next_page=None, 
      template_name='registration/logged_out.html', 
      redirect_field_name=REDIRECT_FIELD_NAME, 
      current_app=None, extra_context=None): 
    """ 
    Logs out the user and displays 'You are logged out' message. 
    """ 
    auth_logout(request) 
    redirect_to = request.REQUEST.get(redirect_field_name, '') 
    if redirect_to: 
     netloc = urlparse.urlparse(redirect_to)[1] 
     # Security check -- don't allow redirection to a different host. 
     if not (netloc and netloc != request.get_host()): 
      return HttpResponseRedirect(redirect_to) 
    #etc... 
+0

importó esto: de django.contrib.auth import logout? ¿o algo mas? – lakesh

+0

No, es solo el código fuente de Django que le dice que hay 5 argumentos opcionales que puede agregar a su llamada de desconexión –

+0

¿Qué debo importar para que esto se ejecute? ¿Sabes? – lakesh

14

Django tiene un método de acceso directo llamado redirect. Se podría utilizar eso para redirigir la siguiente manera:

from django.contrib.auth import logout 
from django.shortcuts import redirect 

def logout_view(request): 
    logout(request) 
    return redirect('home') 

Dónde home es el nombre de un patrón de URL que ha definido en urls.py así:

urlpatterns = patterns('', 
    url(r'^$', 'blah.views.index', name='home')) 
) 

En el redirect llamada que podría utilizar una ruta, así , como / para redirigir a la raíz del sitio, pero usar vistas con nombre es mucho más limpio.

PD: el código publicado por @Hedde es del módulo django.contrib.auth.views, logout método. Si eso es lo que desea utilizar, puede importar esta manera:

from django.contrib.auth.views import logout 
16

Usted no tiene que escribir una vista de eso, sólo puede hacer:

(r'^accounts/logout/$', 'django.contrib.auth.views.logout',{'next_page': '/accounts/login'}) 

Más información: https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

+1

Esto no funciona si ya incluiste todas las URL de autenticación con 'url ('^', include ('django.contrib.auth.urls')),' – RunLoop

+0

@RunLoop entonces, ¿qué hacer para redirigir si he incluido todo auth urls? –

+0

@StefanoMunarini acaba de redirigir desde su punto de vista, p. 'HttpResponseRedirect ('/ registration-success /')' – RunLoop

0
def logout(request):<br> 
    # Log out the user.<br> 
    logout(request)<br> 
    # Return to homepage.<br> 
    return HttpResponseRedirect(reverse('registeration:index'))