为了账号安全,请及时绑定邮箱和手机立即绑定

/account/register 处的 MultiValueDictKeyError

/account/register 处的 MultiValueDictKeyError

三国纷争 2022-11-09 16:18:52
错误:/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")
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

那是因为它找不到钥匙first_namerequest.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每个表格只需要一个。因此,您可以删除其他的,只需将一个保留在表单标签内。


查看完整回答
反对 回复 2022-11-09
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

检查 register.html 的 firstname 字段并确保 firstname 输入字段的名称必须为 first_name。

例如
<input type="text" name="first_name" class="form-control" required>

查看完整回答
反对 回复 2022-11-09
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信