【问题标题】:Redirecting the django built-in logout view after successfull logout注销成功后重定向django内置注销视图
【发布时间】:2013-02-15 22:57:20
【问题描述】:

我正在使用 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 %}

所以在上面的代码中,我将有一个登录 url,它将显示一个登录表单并在成功登录后重定向到另一个 url,这工作正常

我还将有一个我正在使用 django built-in logout view 的注销 url,通过向它提供一个模板 logout.html,它也可以正常工作并在我单击注销 url 时成功显示上述 html 代码

所以现在我想在显示注销页面后重定向到登录页面(经过一段时间......)。我的意思是首先注销视图应该呈现logout.html 代码,然后应该重定向到登录页面....

任何人都可以告诉我如何在渲染logout.html后重定向到登录html页面......

【问题讨论】:

    标签: python django redirect view logout


    【解决方案1】:

    您可以使用setTimeout() 函数在指定时间后重定向到另一个页面。

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

    {% block title %}Logout Page{% endblock %}之后添加这个。

    【讨论】:

    • :基本上我是 django 和 web 技术的新手 :) 所以你能告诉我在 logout.html 中添加上述 sn-p 的位置吗?
    • @shivakrishna 编辑了我的答案。
    • @BurhanKhalid 谢谢 :)
    【解决方案2】:

    把它放在你的 logout.html 中

    <script>
        function redirect(){
           window.location.href = "supply_url_here";
        }
    
        setTimeout(redirect, 2000); //2000 is equivalent to 2 seconds
    </script>
    

    【讨论】:

      【解决方案3】:

      作为 javascript 重定向的替代方案,您还可以执行 HTTP Refresh Header:

      # 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 也能正常工作。缺点是它只是de facto的标准头,HTTP标准中没有规定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-05
        • 2014-02-10
        • 2011-06-15
        • 2022-11-17
        • 2021-12-09
        • 2012-08-08
        • 2020-07-19
        • 1970-01-01
        相关资源
        最近更新 更多