Перенаправление встроенного представления выхода из системы django после успешного выхода из системы

Я использую 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-адрес после успешного входа в систему, который работает нормально.

Также у меня будет URL-адрес выхода из системы, для которого я использую django built-in logout view, предоставив ему шаблон logout.html, который также работает нормально и успешно отображает приведенный выше HTML-код, когда я щелкнул URL-адрес выхода.

Итак, теперь я хочу перенаправить на страницу входа в систему после отображения страницы выхода (через некоторое время ....). Я имею в виду, что сначала представление выхода должно отображать код logout.html, а затем должно перенаправлять на страницу входа ....

Может кто-нибудь, пожалуйста, дайте мне знать, как перенаправить на html-страницу входа после рендеринга logout.html, как указано выше ......


person Shiva Krishna Bavandla    schedule 01.03.2013    source источник


Ответы (3)


Поместите это в свой logout.html

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

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

Вы можете использовать функцию setTimeout() для перенаправления на другую страницу по истечении указанного времени.

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

Добавьте это после {% block title %}Logout Page{% endblock %}.

person arulmr    schedule 01.03.2013
comment
: По сути, я очень новичок в django и веб-технологиях :), так что не могли бы вы сообщить мне, где добавить приведенный выше фрагмент в logout.html? - person Shiva Krishna Bavandla; 01.03.2013
comment
@shivakrishna Отредактировал мой ответ. - person arulmr; 01.03.2013
comment
@BurhanKhalid Спасибо :) - person arulmr; 01.03.2013

в качестве альтернативы перенаправлению 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. Недостатком является то, что это всего лишь стандартный заголовок де-факто, он не указан в стандарте HTTP.

person Lie Ryan    schedule 01.03.2013