簡體   English   中英

注銷頁面在 Django 中不起作用

[英]Logout Page not working in Django

我正在嘗試為 django 創建一個注銷頁面。

這是 views.py 文件:

def index(request):
    if not request.user.is_authenticated():
        return redirect('webapp/login.html')
    else:
        result = Hello_World.delay()
        somethingDownByCelery = result.get(timeout=2)
        context = {'somethingDownByCelery': somethingDownByCelery, 'userName': request.user.username}
        return render(request, 'webapp/index.html', context)

def loginUser(request):
    username = request.POST['username']
    password = request.POST['password']

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return redirect('webapp/index.html')
        else:
            return redirect('webapp/disabled.html')
    else:
        condition = "Invalid Login"
        context = {'condition', condition}
        return render(request, 'webapp/index.html', context)

def logoutUser(request):
    logout(request)
    return redirect('webapp/index.html')

這是啟動注銷后的索引頁面。

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'WebApp/style.css' %}"/>


Hello World, this will call celery!
<html>
    <br>
</html>
{{ somethingDownByCelery }}

<html>
    <br>
    <br>
</html>
Hello! {{ userName }}

<html>
    <br>
    <br>
</html>

<form action="{% url 'WebApp:logout'%}" method="post">
    {% csrf_token %}
    <p> Logout </p>
    <input type="submit" value="Submit">
</form>

應該發生的情況是,用戶會注銷,並被重定向到索引頁面,而由於用戶未登錄,它會將用戶重定向到登錄頁面。

但是,它只顯示給我:視圖 django.contrib.auth.logout 沒有返回 HttpResponse 對象。

這是項目根 urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from WebApp import views
from StripCal import views
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Dashboard_Web.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^webapp/', include('WebApp.urls', namespace="WebApp")),
)

這是應用程序的 urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from WebApp import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^login', views.login, name='login'),
    url(r'^logout', views.logout, name='logout'),
)

嘗試這個:

from django.shortcuts import HttpResponseRedirect

def logoutUser(request):
   logout(request)
   return HttpResponseRedirect('/loginpage/')

而不是webapp/index.html ,您應該在HttpResponseRedirect登錄頁面的 URL,例如/loginpage/

與其編寫自己的,不如使用 Django 的內置注銷視圖。

#urls.py

from django.contrib.auth.views import logout

url(r'^sign-out/$', logout, {'template_name': 'index.html', 'next_page': '/'}, name='sign-out'),

文檔可以在這里找到,現在您可以在不使用表單的情況下鏈接到該文檔,Django 將負責為您進行重定向。

我知道這是一篇舊帖子,但沒有答案解決代碼中出了什么問題,所以就在這里。 在 webapp urls.py文件中,視圖必須指向 logoutUser 視圖而不是 logout 視圖。 與登錄視圖類似

from django.contrib import admin
from WebApp import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^login', views.loginUser, name='login'),
    url(r'^logout', views.logoutUser, name='logout'),
)

現在 url 函數將預期的視圖方法作為參數

先說第一件事。 你的函數應該類似於這個:

def logout_view(request):
    logout(request)
    return redirect('/login')

要使用注銷,您必須像這樣導入注銷:

from django.contrib.auth import logout

如果您根據 User.is_authenticated 重定向用戶,它將永遠不會重定向,因為如果用戶未登錄,則會創建一個匿名用戶。 你可以做這樣的事情:

def home(request):
if request.user.is_anonymous == True:
    return redirect('/login')
else:
    return render(request,"index.html",{'nav':request.user})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM