Django:使用 HttpResponseRedirect 时 /app/logout/ 处的 MultiValueDictKeyError

Django : MultiValueDictKeyError at /app/logout/ when using HttpResponseRedirect

当用户使用 Django 内置的注销方法注销时,我一直在尝试将用户重定向到 main。但是,它一直向我发送这样的错误消息。哪一部分是错误的?

错误信息:

MultiValueDictKeyError at /blog/logout/   "'path'"

views.py

from django.contrib.auth import authenticate, login, logout 

@login_required
def logout(request):
    logout(request)

    return HttpResponseRedirect('blog/login.html')

urls.py

 url(r'^login/$', views.login, name='login'),
 url(r'^logout/$', views.logout, name='logout'),

编辑 01 我试图找到路径变量但找不到。 另外,我更改了注销方法代码。

@login_required
def logout(request):
   logout(request)

   return HttpResponseRedirect('/blog/login/')

这是在views.py

中登录
def login(request):
    if request.method == "POST":
        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)
                items = Article.objects.filter(is_visible=True)
                request.session['username']=username
                return render(request, 'blog/home.html', {'items': items})
            else:
                return render(request, 'blog/login.html', {'error_message': 'This account has been locked'})
        else:
            return render(request, 'blog/login.html', {'error_message': 'invaild login'})
    return render(request, 'blog/login.html')

我不知道这是否相关,但我在 settings.py

中添加了这一行
#added for login authentification
LOGIN_REDIRECT_URL = 'home'

问题出在这一行:

return HttpResponseRedirect('blog/login.html')

HttpResponseRedirect 需要 URL 路径 而不是模板的 location/path,我想你需要什么是:

from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate, login
from django.contrib.auth import logout as django_logout 

@login_required
def logout(request):
    django_logout(request)

    return HttpResponseRedirect('/blog/login/')

并且还要更改登录视图的这些行:

username = request.POST['username']
password = request.POST['password']

收件人:

username = request.POST.get('username') 
password = request.POST.get('password')