错误:
/ account / register处的MultiValueDictKeyError
'名字'
请求方法:POST
要求网址:http://127.0.0.1:8000/account/register
Django版本:2.2.7
异常类型:MultiValueDictKeyError
异常值:
'名字'
异常位置: getitem 中的C:\ Users \ Maansi \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ utils \ datastructures.py,第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")
login.html
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="username" id="name" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your username'" placeholder="Enter your username">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="password" id="password" type="password" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter Password'" placeholder="Enter Password">
</div>
</div>
register.html:
<div class="col-lg-8">
{% csrf_token %}
<form class="form-contact contact_form" action="register" method="post">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="first_name" id="name" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your name'" placeholder="Enter your name">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="last_name" id="name" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your last name'" placeholder="Enter your last name">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="username" id="name" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your username'" placeholder="Enter your username">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="email" id="email" type="email" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter email address'" placeholder="Email">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="password1" id="password" type="password" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Create Password'" placeholder="Create Password">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
{% csrf_token %}
<input class="form-control valid" name="password2" id="password" type="password" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Confirm Password'" placeholder="Confirm Password">
</div>
</div>
</div>
跟踪:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/account/register
Django Version: 2.2.7
Python Version: 3.7.3
Installed Applications:
['news.apps.NewsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\utils\datastructures.py" in __getitem__
78. list_ = super().__getitem__(key)
During handling of the above exception ('first_name'), another exception occurred:
File "C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Maansi\projects\Learn\account\views.py" in register
34. first_name=request.GET['first_name']
File "C:\Users\Maansi\AppData\Roaming\Python\Python37\site-packages\django\utils\datastructures.py" in __getitem__
80. raise MultiValueDictKeyError(key)
Exception Type: MultiValueDictKeyError at /account/register
Exception Value: 'first_name'
first_name有什么问题。让我知道是否需要更多信息。
答案 0 :(得分:1)
这是因为在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
。因此,您可以删除其他的,只需将其中一个保留在form标签中即可。