/account/register 处的 MultiValueDictKeyError

错误:/account/register 'first_name' 处的 MultiValueDictKeyError 请求方法:POST 请求 URL: http: //127.0.0.1 :8000/account/register Django 版本:2.2.7 异常类型:MultiValueDictKeyError 异常值:

“first_name”异常位置: C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\utils\datastructures.py 在getitem中,第 80 行 views.py:


 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")


def register(request):

    if request.method=='POST':

        first_name=request.POST['first_name']

        last_name=request.POST['last_name']

        username=request.POST['username']

        password1=request.POST['password1']

        password2=request.POST['password2']

        email=request.POST['email']

        if password1==password2:

            if User.objects.filter(email=email).exists():

                messages.info(request,'Email Taken')

                return redirect('register')

            elif User.objects.filter(username=username).exists():

                messages.info(request,'Username Taken')

                return redirect('register')

            else:    

             user=User.objects.create_user(username=username,password=password1,email=email,first_name=first_name,last_name=last_name)

                user.save()

                print('user created')

                return redirect('login')

        else:

            messages.info(request,"Password don't match!")

            return redirect('register')

    else:

        return render(request,"register.html")


三国纷争
浏览 226回答 2
2回答

30秒到达战场

那是因为它找不到钥匙first_name。request.POST在Python中,字典有一个内置的静态方法.get()。.get()找不到键时,默认返回或None您指定的值。我的建议是使用.get(). 这是示例-改变first_name=request.POST["first_name"]至first_name=request.POST.get("first_name", "default value")此外,无需{% csrf_token %}在每个输入字段之前编写。csrf_token每个表格只需要一个。因此,您可以删除其他的,只需将一个保留在表单标签内。

小唯快跑啊

检查 register.html 的 firstname 字段并确保 firstname 输入字段的名称必须为 first_name。例如<input type="text" name="first_name" class="form-control" required>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python