在登录页面上的POST请求之后在Django中生成的MultiValueDictKeyError

 让爱自由2009 发布于 2023-02-08 15:47

我正在尝试构建一个登录页面.我正在运行Django 1.6.1.我在很大程度上遵循了www.fir3net.com/Django/django.html上的教程.为方便起见,我会在这里重新发布很多内容.

错误信息:

Request Method: GET
Request URL: http://127.0.0.1:8000/login/

Database In Use: SQLite3 

Django Version: 1.6.1
Python Version: 2.7.4
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.contenttypes',
 'bookmarks')
Installed Middleware:
('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')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/tatenda/Documents/Programming/Django/Progs/django_bookmarks/bookmarks/views.py" in login_user
  17.   username = request.POST['username']
File "/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py" in __getitem__
  301.             raise MultiValueDictKeyError(repr(key))

Exception Type: MultiValueDictKeyError at /login/
Exception Value: "'username'"

查看代码(我知道这里调用的几个导入函数对我当前的问题来说是多余的.大多数情况下,它们都是冗余的代码,因为我们试图按照之前的教程来解决这个问题):

from django.http import*
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
from django.template import Context
from django.template.loader import get_template
from django.http import HttpResponse, Http404
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.contrib.auth.decorators import login_required

def login_user(request):

    username = password = ''
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password = password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return HttpResponseRedirect('/main_page/')
    return render_to_response('base.html', context_instance = RequestContext(request))

@login_required(login_url = '/login/')
def main_page(request):
    template = get_template('main_page.html')
    variables = Context ({
        'head_title':'Django Bookmarks',
        'page_title':'Welcome to Django Bookmarks',
        'page_body':'Where you store and share bookmarks!'
    })
    output = template.render(variables)
    return HttpResponse(output)

def user_page(request, username):
    try:
        user = User.objects.get(username=username)
    except:
        raise Http404('Requested user not found.')

    bookmarks = user.bookmark_set.all()
    template = get_template('user_page.html')
    variables = Context({
        'username':username,
        'bookmarks': bookmarks
    })
    output = template.render(variables)
    return HttpResponse(output)

@csrf_exempt
def login_page(request):

    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request,user)
            template = get_template('main_page.html')
            variables = Context ({
                'head_title':'Django Bookmarks',
                'page_title':'Welcome to Django Bookmarks',
                'page_body':'Where you store and share bookmarks!'
            })
            output = template.render(variables)
            return HttpResponse(output)
        else:
            raise Http404('Disabled account, please contact administrator.')
    else:
        raise Http404('Invalid login.')

来自urls.py文件的信息:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from bookmarks.views import*

admin.autodiscover()

urlpatterns = patterns('',
    (r'^$', main_page),
    (r'^user/(\w+)/$', user_page),
    url(r'^login/$', login_user),
)

用于创建登录页面的基本模板(该文件名为base.html):
注意 - CSS样式是基于引导程序的



    
        {% block head %}
            
             {% block title %}{% endblock %} - My Webpage
{% endblock %}
{% block content %}{% endblock %}

登录页面的HTML代码(该文件名为login.html):

{% extends "base.html" %}
{% block main %}
    
{% csrf_token %} {% if next %} {% endif %}
{% endblock %}

小智.. 23

我有同样的错误,我做了这个,它的工作原理.更改:

username = request.POST['username']
password = request.POST['password'] 

至:

username = request.POST.get('username')
password = request.POST.get('password')

以上处理可能导致的POST和GET方法.我希望这有帮助.

1 个回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有