繁体   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