登出后重定向Django内置登出视图

5 投票
3 回答
7167 浏览
提问于 2025-04-17 17:34

我正在使用Django来构建一个登录和登出页面,下面是我的代码。

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.core.urlresolvers import reverse

urlpatterns = patterns('',
             url(r'^$', 'learn_django.views.home_page'),          
             url(r'^login/$', 'learn_django.views.login'),
             url(r'^logout/$', 'django.contrib.auth.views.logout', {'template_name': 'logout.html'}),
)

views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth import authenticate, login as main_login, logout as main_logout

def home_page(request):
    return render_to_response("home_page.html")

def login(request):
    .....
    .....
    return render_to_response("login.html")

logout.html

{% extends 'base.html' %}
{% block title %}Logout Page{% endblock %}
{% block body %}
  <div>
    <p style='color:#092E20;font-size:25px;font-weight:bold;padding-top:20px;padding-left:15px;'>
         You have been successfully logged out......
    </p>
    <p>Redirecting to login page.....</p> 
  </div>      
{% endblock %}

在上面的代码中,我有一个登录的链接,这个链接会显示一个登录表单,并在成功登录后跳转到另一个链接,这个功能运行得很好。

我还设置了一个登出的链接,我使用了Django自带的登出视图,并提供了一个模板logout.html,这个功能也正常,点击登出链接后可以成功显示上面的HTML代码。

现在我想在显示登出页面后,过一段时间再跳转到登录页面。也就是说,首先登出视图应该渲染logout.html的内容,然后再跳转到登录页面。

有没有人能告诉我,如何在渲染完logout.html后跳转到登录页面呢?

3 个回答

4

除了使用JavaScript进行重定向,你还可以使用HTTP刷新头来实现:

# in views.py
from django.contrib.auth import logout as main_logout

def logout(*args, **kwargs):
    resp = main_logout(*args, **kwargs)
    resp['Refresh'] = '3;URL=/account/login/' # redirects after 3 seconds to /account/login
    return resp

根据需要修改你的urls.py文件。

这样做的好处是,即使用户的浏览器禁用了JavaScript,这种方法依然有效。缺点是,这种方式在技术上并不是HTTP标准中明确规定的,而只是大家普遍接受的做法。

12

你可以使用 setTimeout() 这个函数,在指定的时间后跳转到另一个页面。

{% block extrahead %}{{ block.super }}
    <script type="text/javascript">
        setTimeout(function() {
            window.location.href = "/login/";
        }, 2000);
    </script>
{% endblock %}

把这个代码加在 {% block title %}Logout Page{% endblock %} 之后。

9

把这个放到你的 logout.html 文件里

<script>
    function redirect(){
       window.location.href = "supply_url_here";
    }

    setTimeout(redirect, 2000); //2000 is equivalent to 2 seconds
</script>

撰写回答