MultiValueDictKeyError at / login 'username' при вводе учетных данных - PullRequest
0 голосов
/ 08 мая 2020

Я создал страницу входа, но всякий раз, когда я ввожу учетные данные, она показывает мне MultiValueDictKeyError с именем пользователя

Моя HTML страница входа:

<html>
<head>
    <title>Login Page</title>
</head>
<body>
<form method="post" action="/login">
    {% csrf_token %}
    <table width="20%" bgcolor="0099CC" align="center">
        <tr>
            <td colspan=2>
                <center><font size=4><b>User Login Page</b></font></center>
            </td>
        </tr>
        <tr>
            <td>Username:</td>
            <td><input type="text" size=25 name="Username"></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="Password" size=25 name="Password"></td>
        </tr>
        <tr>
            <td><input type="submit" onclick="return check(this.form)" value="Login"></td>
        </tr>
    </table>
</form>
<div>
    {% for messages in messages %}
    <h3> {{messages}} </h3>
    {% endfor %}
</div>
</body>
</html>

Мой файл просмотров это:

def login(request):
    if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']

    user = auth.authenticate(username=username,password=password)

    if user is not None:
        auth.login(request, user)
        return redirect('/')
    else:
        messages.info(request,'Invalid Credentials')
        return redirect('login ')
else:
    return render(request,'login.html')

Мои URL-адреса для просмотров:

from django.URLs import path
from . import views

urlpatterns = [
    path('',views.homepage, name='homepage'),
    path('login',views.login, name='login'),
    path('registration',views.registration, name='registration'),
]

Отображается ошибка:

MultiValueDictKeyError at /login
'username'
Request Method: POST
Request URL:    http://127.0.0.1:8000/login
Django Version: 3.0.4
Exception Type: MultiValueDictKeyError
Exception Value:    
'username'
Exception Location: C:\Program Files\Python38\lib\site- 
packages\django\utils\datastructures.py in __getitem__, line 78
Python Executable:  C:\Program Files\Python38\python.exe
Python Version: 3.8.1
Python Path:    
['C:\\Users\\siddh\\projects\\telusko',
'C:\\Program Files\\Python38\\python38.zip',
'C:\\Program Files\\Python38\\DLLs',
'C:\\Program Files\\Python38\\lib',
'C:\\Program Files\\Python38',
'C:\\Program Files\\Python38\\lib\\site-packages']
Server time:    Fri, 8 May 2020 07:27:41 +0000

Может ли кто-нибудь помочь мне решить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Советы

Ошибка означает, что ключ username не имеет значения: Итак,

if request.method == 'POST':
    username = request.POST.get('username', None)

Итак, если нет ключа username из запроса, * Имя пользователя будет присвоено 1007 *.

Основная ошибка

Ваша ошибка в шаблоне:

<tr>
<td>Username:</td>
<!-- name=Username to username -->
<td><input type="text" size=25 name="username"></td>
</tr>

<tr>
<td>Password:</td>
<!-- name=Password to password-->
<td><input type="Password" size=25 name="password"></td>
</tr>

* Примечание: - Главное, чему вы должны научиться из этой проблемы это MultiValueDictKeyError . Вы должны понимать, что ошибка отображается, когда нет подходящего ключа, но вы пытаетесь получить доступ к значению из этого ключа.

0 голосов
/ 08 мая 2020

попробуйте:

username = request.POST.get('Username', '')
password = request.POST.get('Password', '')

обратите внимание, что 'U' в имени пользователя и 'P' в пароле - заглавные буквы.

...