MultiValueDictKeyError в / users / signup / "password_1" - PullRequest
0 голосов
/ 14 июля 2020

учусь django, а пока создаю пользователя. Я получил эту ошибку MultiValueDictKeyError в / users / signup / "password_1", пожалуйста, помогите мне

views.py, последняя определенная функция, в passwords1. Это место, где указывается ошибка.

from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


def userslogin(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse("index"))
        else:
            return render(request, "users/login.html", {
                "message": "Invalid credentials."
            })
    else:
        return render(request, "users/login.html")

def userlogout(request):
    logout(request)
    return render(request, 'users/logout.html',{
                "message": "Succesfully logged out."
})

def usersignup(request):
    if request.method == "POST":
        username = request.POST["username"]
        email = request.POST["email"]
        password_1 = request.POST["password_1"]
        password_2 = request.POST["password_2"]
        myuser = User.objects.create_superuser(username = username,password = password_1, email=email)
        if myuser is not None:            
            myuser.save() 
            return HttpResponseRedirect(reverse("main"))
        else:
            return render(request, "users/login.html", {
                "message": "Invalid credentials."
            })
        
        
    else:
         
        return render(request, "users/signup.html")

urls.py Здесь нет ничего неправильного, но я все же включил этот файл

from django.urls import path, include
from . import views
import blog


urlpatterns = [
    path("", blog.views.main, name="index"),
    path('login/',views.userslogin, name = 'login'),
    path('logout/',views.userlogout, name = 'logout'),
    path('signup/',views.usersignup, name = 'signup'),
    
]

регистрация. html

{% extends 'users/layout.html' %}

{% block body %}
    <h1>Physics Blog</h1>

    {% if message %}
        <div>{{ message }}</div>
    {% endif %}
    
    <form  action= "{% url 'signup' %}" method="post">
    {% csrf_token %}
        <input type="text" placeholder="username" name = "username" id="username">
        <input type="email" placeholder="email" name = "email" id="email">
        <input type="password" placeholder="password 1">
        <input type="password" placeholder="password 2">
        <input type="submit">

    </form>
    

{% endblock %}

1 Ответ

1 голос
/ 14 июля 2020

Вам необходимо указать имя виджета input, чтобы request.POST[] мог захватить значение по input имени виджета. Добавьте name=password_1, name=password_2 в свой виджет ввода

<form action="{% url 'signup' %}" method="post">
    {% csrf_token %}
    <input type="text" placeholder="username" name = "username" id="username">
    <input type="email" placeholder="email" name = "email" id="email">
    <input type="password" <b>name="password_1"</b> placeholder="password 1">
    <input type="password" <b>name="password_2"</b> placeholder="password 2">
    <input type="submit">
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...