[英]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/
我知道這是一篇舊帖子,但沒有答案解決代碼中出了什么問題,所以就在這里。 在 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.