MultiValueDictKeyError - Django

Posted

技术标签:

【中文标题】MultiValueDictKeyError - Django【英文标题】: 【发布时间】:2020-05-24 06:16:09 【问题描述】:

我在 Django 中获取 MultiValueDictKeyError 时遇到问题。我正在尝试从我的网站上注销用户,所以我制作了以下代码。

html

    </li>
            <li class="nav-item mr-3">
              <a href="javascript:document.getElementById('logout').submit()" class="nav-link">
              <i class="fas.fa-sign-out-alt"></i>Logout 
              </a>
              <form action="% url 'logout'%" method="POST" id="logout">
                % csrf_token %
                <input type="hidden">
              </form>
            </li>

这是我在“accounts/views.py”中的登录和注销功能

    def login(request):
    # request method
    if request.method == 'POST':
        #Saving the username and password in a variable
        username = request.POST['username']
        password = request.POST['password']

        #checking if the user name and password matches using auth function
        user = auth.authenticate(username=username, password=password)

        # checking if the user is found in Database with user name and password, if found then login
        if user is not None:
            auth.login(request, user)
            messages.success(request, "Welcome to BTRE.")
            return redirect('dashboard')
        # if user name and password do not match with DB. display message and redirect to login page.
        else:
            messages.error(request, "Incorect Username and/or Password. Please type correct user name and password")
            return redirect('login')
    else:
        return render (request, 'accounts/login.html')

def logout(request):
    if request.method == 'POST':
        auth.logout(request)
        messages.success(request,"You are now logged out")
        return redirect('index')

环境:

请求方法:POST 请求 URL: http://127.0.0.1:8000/accounts/logout

Django 版本:3.0.2 Python 版本:3.8.1 已安装的应用程序: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'pages.apps.PagesConfig', 'listings.apps.ListingsConfig', 'realtors.apps.RealtorsConfig', 'accounts.apps.AccountsConfig'] 已安装的中间件: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback(最近一次调用最后一次):文件 "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\utils\datastructures.py", 第 76 行,在 getitem 中 list_ = super().getitem(key)

在处理上述异常('username')期间,另一个异常 发生:文件 "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\exception.py", 第 34 行,在内部 response = get_response(request) 文件 "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\base.py", 第 115 行,在 _get_response 中 response = self.process_exception_by_middleware(e, request) 文件 "C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\core\handlers\base.py", 第 113 行,在 _get_response 中 response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“C:\Users\DD\Desktop\btre\accounts\views.py”,第 12 行,登录 用户名 = request.POST['username'] 文件“C:\Users\DD\Desktop\btre\venv\lib\site-packages\django\utils\datastructures.py”, 第 78 行,在 getitem 中 引发 MultiValueDictKeyError(key)

异常类型:MultiValueDictKeyError at /accounts/logout 异常 值:'用户名'

【问题讨论】:

对不起。标题中的 Django 拼写错误。 :) 您可以编辑您的帖子以更改拼写。将 request.POST['username'] 更改为 request.POST.get(username') 和密码。 #将用户名和密码保存在一个变量中 username = request.POST.get('username') password = request.POST.get('password') 没有。不工作。仍然没有注销用户并重定向到登录页面并显示错误“错误:用户名和/或密码不正确。请输入正确的用户名和密码”。这是我在登录功能中制作的 我认为问题出在 html 中。 【参考方案1】:
from django.urls import path
from . import views

urlpatterns = [
    path('login', views.login, name ='login'),
    path('logout', views.login, name ='logout'),
    path('register', views.register, name ='register'),
    path('dashboard', views.dashboard , name = 'dashboard')
]

抱歉各位浪费了你们的时间。 urls.py 中的一个小错误让我头疼了三个小时。我很感激你们的时间。再次为浪费您的时间道歉。

【讨论】:

以上是关于MultiValueDictKeyError - Django的主要内容,如果未能解决你的问题,请参考以下文章

MultiValueDictKeyError "iSortingCols"

如何修复 django 错误 MultiValueDictKeyError

尝试接收条带挂钩时在 Django 上获取 MultiValueDictKeyError

Django 在文件上传中引发 MultiValueDictKeyError

MultiValueDictKeyError at / update'date'

如何在Formset POST上调试Django MultiValueDictKeyError