首页 > 解决方案 > MultiValueDictKeyError at /login/ "uname,

问题描述

我正在使用 python mysql 和 django 开发一个电子商务网站。在登录期间,我进入MultiValueDictKeyError/login/。有人可以评论这个吗?

这是我的登录页面,名称“uname”出现错误:

 <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>

      <center>
        <form action="/login/" method="POST">
            {% csrf_token %}
            <input type="text" name="uname" placeholder="username"><br><br>
            <input type="text" name="pass" placeholder="password"><br><br>
            <input type="submit" value="Login">

        </form>
    </center>

    </body>
    </html>

这是我使用 POST 方法的 views.py:

    from django.shortcuts import render, redirect, HttpResponse
    from django.http import HttpResponse
    from . models import *



    def home(request):
        return render(request,'index.html')

    def fn_login(request):
        v_username = request.POST['uname']
        v_password = request.POST['pass']
        try:
            login_obj = Login.objects.get(username=v_username,password=v_password)

            if login_obj.password == v_password:
                return render(request,'index.html')
            return HttpResponse('incorrect password')

        except Exception as e:
            print(e)
            return HttpResponse('invalid username')

这是 myapp urls.py:

from django.contrib import admin 
from django.urls import path 

# importing views from views..py 
from .import views

urlpatterns = [ 
    path('index/',views.home),
    path('login/',views.fn_login,),

]   

我的错误是这样的:

MultiValueDictKeyError at /login/
'uname'
Request Method: GET
Request URL:    http://127.0.0.1:8000/login/
Django Version: 3.0.4
Exception Type: MultiValueDictKeyError
Exception Value:    
'uname'
Exception Location: /home/akshay/Desktop/Django/env1/lib/python3.6/site-packages/django/utils/datastructures.py in __getitem__, line 78
Python Executable:  /home/akshay/Desktop/Django/env1/bin/python
Python Version: 3.6.9
Python Path:    
['/home/akshay/Desktop/Django/Ekart',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/home/akshay/Desktop/Django/env1/lib/python3.6/site-packages']
Server time:    Wed, 25 Mar 2020 14:22:15 +0000
enter code here

标签: pythonmysqldjango

解决方案


你能试着改变吗

v_username = request.POST['uname']
v_password = request.POST['pass']

到下面这个

v_username = request.POST.get('uname')
v_password = request.POST.get('pass')

推荐阅读