登录页面上的 POST 请求后在 Django 中生成的 MultiValueDictKeyError [英] MultiValueDictKeyError generated in Django after POST request on login page
本文介绍了登录页面上的 POST 请求后在 Django 中生成的 MultiValueDictKeyError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试构建登录页面.我正在运行 Django 1.6.1.我一直在关注 www.fir3net.com/Django/django.html 上的教程.为方便起见,我会在这里转发很多.
错误信息:
请求方式:GET请求地址:http://127.0.0.1:8000/login/使用中的数据库:SQLite3Django 版本:1.6.1Python 版本:2.7.4已安装的应用程序:('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','django.contrib.contenttypes','书签')安装的中间件:('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.auth.middleware.RemoteUserMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware')追溯:get_response 中的文件/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py"114.响应=wrapped_callback(请求,*callback_args,**callback_kwargs)login_user 中的文件/home/tatenda/Documents/Programming/Django/Progs/django_bookmarks/bookmarks/views.py"17. 用户名 = request.POST['用户名']__getitem__ 中的文件/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py"301. 引发 MultiValueDictKeyError(repr(key))异常类型:MultiValueDictKeyError at/login/异常值:'用户名'"
查看代码(我知道这里调用的几个导入函数对于我的当前问题来说是多余的.大多数情况下,它们是尝试按照之前关于如何执行此操作的教程而产生的多余代码):
from django.http import*从 django.shortcuts 导入 render_to_response,重定向从 django.template 导入 RequestContext从 django.template 导入上下文从 django.template.loader 导入 get_template从 django.http 导入 HttpResponse, Http404从 django.contrib.auth.models 导入用户从 django.contrib.auth 导入验证、登录、注销从 django.views.decorators.csrf 导入 csrf_exempt, csrf_protect从 django.contrib.auth.decorators 导入 login_required定义登录用户(请求):用户名 = 密码 = ''用户名 = request.POST['用户名']密码 = request.POST['密码']用户 = 验证(用户名 = 用户名,密码 = 密码)如果用户不是无:如果 user.is_active:登录(请求,用户)return HttpResponseRedirect('/main_page/')return render_to_response('base.html', context_instance = RequestContext(request))@login_required(login_url = '/login/')定义主页面(请求):template = get_template('main_page.html')变量 = 上下文 ({'head_title':'Django 书签','page_title':'欢迎使用 Django 书签','page_body':'您存储和共享书签的地方!'})输出 = 模板.渲染(变量)返回 HttpResponse(输出)def user_page(请求,用户名):尝试:用户 = User.objects.get(用户名=用户名)除了:raise Http404('未找到请求的用户.')书签 = user.bookmark_set.all()template = get_template('user_page.html')变量 = 上下文({'用户名':用户名,'书签':书签})输出 = 模板.渲染(变量)返回 HttpResponse(输出)@csrf_exempt定义登录页面(请求):用户名 = request.POST['用户名']密码 = request.POST['密码']用户 = 身份验证(用户名 = 用户名,密码 = 密码)如果用户不是无:如果 user.is_active:登录(请求,用户)template = get_template('main_page.html')变量 = 上下文 ({'head_title':'Django 书签','page_title':'欢迎使用 Django 书签','page_body':'您存储和共享书签的地方!'})输出 = 模板.渲染(变量)返回 HttpResponse(输出)别的:raise Http404('账号被禁用,请联系管理员.')别的:raise Http404('无效登录.')
来自 urls.py 文件的信息:
from django.conf.urls 导入模式,包含,url从 django.contrib 导入管理员从 bookmarks.views 导入*admin.autodiscover()urlpatterns = 模式('',(r'^$', main_page),(r'^user/(w+)/$', user_page),url(r'^login/$', login_user),)
用于创建登录页面的基本模板(文件名为 base.html):
注意 - CSS 样式基于引导程序
<头>{% 块头 %}<link rel = "stylesheet" href = "style.css"/><标题>{% block title %}{% endblock %} - 我的网页</title></div>{% 结束块 %}头部><身体><div id = "content">{% 块内容 %}{% endblock %}</div><div id = "页脚">{% 块页脚 %}&复制;版权所有 2011 <a href="http://domain.invalid/">you</a>{% 结束块 %}