Django表单设POST方法仍出现MultiValueDictKeyError的原因
MultiValueDictKeyError错误原因及修复
直接触发原因
错误日志明确显示请求方法是GET,但你的verify_user视图函数直接通过request.POST['name']获取表单数据——当请求为GET时,request.POST是空的MultiValueDict,不存在name这个键,因此抛出MultiValueDictKeyError。
另外,视图处理完POST请求后执行了redirect('/verify_user'),重定向会让浏览器发送GET请求再次访问该视图,这也会触发同样的错误。
额外问题(非当前错误直接原因)
表单中确认密码输入框的type属性写错了:type="passord",正确应该是type="password",这个错误会导致输入的确认密码明文显示,但不影响表单提交。
修复方法
1. 视图函数区分请求方法
只有当请求是POST时才处理表单数据,GET请求直接渲染页面:
def verify_user(request): if request.method == 'POST': # 用get方法获取值,避免键不存在时报错,还可设置默认值 inputname = request.POST.get('name', '') inputpass = request.POST.get('password', '') inputconfirmpass = request.POST.get('confirm_password', '') if inputpass != inputconfirmpass: messages.info(request, "Passwords don't match") else: messages.info(request, "Passwords match") # GET请求或处理完POST后,渲染对应模板 return render(request, '你的模板文件路径.html')
2. 修正表单笔误
把确认密码输入框的type属性改正确:
<input required type="password" placeholder="Confirm password" name="confirm_password" id="">
内容的提问来源于stack exchange,提问作者vaseemcholakkan
相关产品推荐
相关产品推荐

