Django中的django.contrib.auth.logout

lak*_*esh 17 django

我想使用Django的注销功能但不确定如何正确使用它.我一直在指这个Django用户认证:https://docs.djangoproject.com/en/dev/topics/auth/ 它读取

from django.contrib.auth import logout

def logout_view(request):
    logout(request)
    # Redirect to a success page.
Run Code Online (Sandbox Code Playgroud)

令我困惑的部分是#Redirect到成功页面.如何将其重定向到另一个页面.我应该使用HttpResponseRedirect还是向logout(request)添加其他参数.我不知道该怎么做..需要一些指导.

小智 18

您不必为此编写视图,您可以这样做:

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

更多信息:https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

  • 如果您已经使用 `url('^', include('django.contrib.auth.urls')),` 包含了所有身份验证 URL,这将不起作用 (3认同)

Sto*_*ica 16

Django有一个名为的快捷方法redirect.您可以使用它来重定向,如下所示:

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

def logout_view(request):
    logout(request)
    return redirect('home')
Run Code Online (Sandbox Code Playgroud)

home您定义的url模式的名称在哪里,urls.py如下所示:

urlpatterns = patterns('',
    url(r'^$', 'blah.views.index', name='home'))
)
Run Code Online (Sandbox Code Playgroud)

redirect调用中,您也可以使用路径,例如/重定向到站点根目录,但使用命名视图更加清晰.

PS:@Hedde发布的代码来自django.contrib.auth.views模块,logout方法.如果这是您想要使用的,您可以像这样导入它:

from django.contrib.auth.views import logout
Run Code Online (Sandbox Code Playgroud)


Hed*_*ide 13

看一下注销方法的来源,它应该让你清楚地知道发生了什么.您可以向logout方法添加额外的参数来处理重定向,但您也可以在自定义行为的方法之后追加

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...
Run Code Online (Sandbox Code Playgroud)