You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django注册功能触发MultiValueDictKeyError错误求助

注册流程提交表单时出现MultiValueDictKeyError错误

我开发了一个简单的登录注册项目,在注册流程提交表单并跳转至登录页面时,遇到了MultiValueDictKeyError错误,错误出现在firsname = request.POST['fmyname']这一行。

相关代码

signup.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sign up here</title>
</head>
<body>
    <h3>Sign Up</h3>
    <form action="/signup" method="POST">
        {% csrf_token %}
        <label for="">username</label>
        <input type="text" id="username" name="username" placeholder="Create a user name" Required><br>
        <label for="">first name</label>
        <input type="text" id="fname" name="fmyname" placeholder="First Name" Required><br>
        <label for="">last name</label>
        <input type="text" id="lname" name="lname" placeholder="Last Name" Required><br>
        <label for="">email</label>
        <input type="email" id="email" name="email" placeholder="enter your email address" Required><br>
        <label for="">password</label>
        <input type="password" id="pass1" name="pass" placeholder="enter your password" Required><br>
        <label for="">re-enter password</label>
        <input type="password" id="pass2" name="pass2" placeholder="re enter your password" Required><br><br>

        <button type="submit">Sign Up</button>
    </form>
</body>
</html>

views.py

def signup(request):

    if request.method == "POST":
        # username = request.POST.get('username')
        username = request.POST['username']
        firsname = request.POST['fmyname']     #here i got ERROR of the multivaluedictkeyerror
        lname = request.POST['lname']
        email = request.POST['email']
        pass1 = request.POST['pass']
        pass2 = request.POST['pass2']

        myuser = User.objects.create_user(username, email, pass1)

        myuser.first_name = firsname
        myuser.last_name = lname

        myuser.save()

        messages.success(request, "your account is created.")
        return redirect('signin')

    return render(request, 'authentication\signup.html')

错误原因与修复方案

核心问题

直接使用request.POST['key']的方式访问POST数据时,如果请求中不存在对应的key,就会抛出MultiValueDictKeyError。另外代码中还存在两个小问题:变量名firsname拼写错误(应为firstname),以及模板路径使用了反斜杠,可能导致解析异常。

修复后的views.py代码

def signup(request):
    if request.method == "POST":
        # 改用get方法获取POST数据,避免key不存在时报错
        username = request.POST.get('username')
        firstname = request.POST.get('fmyname')
        lname = request.POST.get('lname')
        email = request.POST.get('email')
        pass1 = request.POST.get('pass')
        pass2 = request.POST.get('pass2')

        # 新增字段非空校验
        if not all([username, firstname, lname, email, pass1, pass2]):
            messages.error(request, "所有字段不能为空")
            return redirect('signup')
        
        # 新增密码一致性校验
        if pass1 != pass2:
            messages.error(request, "两次输入的密码不一致")
            return redirect('signup')

        myuser = User.objects.create_user(username, email, pass1)
        myuser.first_name = firstname
        myuser.last_name = lname
        myuser.save()

        messages.success(request, "你的账户已创建成功")
        return redirect('signin')

    # 修正路径分隔符为正斜杠
    return render(request, 'authentication/signup.html')

可选优化:统一命名规范

为提升代码可读性,建议修改HTML中first name输入框的name属性为更直观的firstname:

<input type="text" id="fname" name="firstname" placeholder="First Name" Required><br>

同步修改视图中的对应代码:

firstname = request.POST.get('firstname')

内容的提问来源于stack exchange,提问作者khushal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:05:25