django中的/ signup /“'username'”中的MultiValueDictKeyError

时间:2017-11-01 04:17:49

标签: python django django-forms django-views django-authentication

我创建了一个注册页面,用于在django admin中创建用户 这就是我的signup.html看起来很像

的方式
<h1>signup</h1>
<form method="post" action="{% url 'signup' %}">

  username:
  <br/>
  <input type="text" name="username" >
  <br/>
 passwod:

 <br/>

  <input type="password" name="password1" >
  <br/>
confirm passwod:
<br/>

  <input type="password" name="passwod2" >
  <br/>

  <input type="submit"  value="signup">


</form>

这就是我使用我的网址查看视图的方式:

from django.conf.urls import url
from django.contrib import admin
import accounts.views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^signup/', accounts.views.signup, name='signup'),

这是我的观点部分:

from django.shortcuts import render
from django.contrib.auth.models import User
from django.template import RequestContext
# Create your views here.
def signup(request):
    if request.method == 'POST':
        User.objects.create_user(request.POST.get('username') , password=request.POST.get('password1')
        return render (request,'accounts/signup.html')

   else:
        return render (request,'accounts/signup.html')

但是当我尝试运行服务器并输入有关用户名和密码的详细信息时提交iam会收到名为MultiValueDictKeyError的错误

MultiValueDictKeyError at /signup/

"'username'"

Request Method:     POST
Request URL:    http://127.0.0.1:8000/signup/
Django Version:     1.11.1
Exception Type:     MultiValueDictKeyError
Exception Value:    

"'username'"

Exception Location:     C:\Python35\lib\site-packages\django\utils\datastructures.py in __getitem__, line 85
Python Executable:  C:\Python35\python.exe
Python Version:     3.5.3
Python Path:    

['D:\\python programs\\reddit\\redditclone',
 'C:\\Python35\\python35.zip',
 'C:\\Python35\\DLLs',
 'C:\\Python35\\lib',
 'C:\\Python35',
 'C:\\Python35\\lib\\site-packages',
 'C:\\Python35\\lib\\site-packages\\win32',
 'C:\\Python35\\lib\\site-packages\\win32\\lib',
 'C:\\Python35\\lib\\site-packages\\Pythonwin']

Server time:    Wed, 1 Nov 2017 04:05:10 +0000

任何形式的帮助表示赞赏 提前谢谢

2 个答案:

答案 0 :(得分:1)

您收到该错误是因为您没有提到数据库的用户名属性,django希望将用户名放在用户表的用户名列中

所以使用这个

User.objects.create(username=request.POST.get('username') , email=request.POST.get('email'),password=request.POST.get('password1'))

答案 1 :(得分:1)

您仅使用用户提供的值。如果用户没有给出任何值,你必须给出一个默认值。

请求的结构就像... request.POST.get(<key>, <default>) 你必须给出一个默认值 username=request.POST.get("username", "default user")