我正在尝试构建一个登录页面.我正在运行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
登录页面的HTML代码(该文件名为login.html):
{% extends "base.html" %} {% block main %}{% endblock %}
小智.. 23
我有同样的错误,我做了这个,它的工作原理.更改:
username = request.POST['username'] password = request.POST['password']
至:
username = request.POST.get('username') password = request.POST.get('password')
以上处理可能导致的POST和GET方法.我希望这有帮助.
我有同样的错误,我做了这个,它的工作原理.更改:
username = request.POST['username'] password = request.POST['password']
至:
username = request.POST.get('username') password = request.POST.get('password')
以上处理可能导致的POST和GET方法.我希望这有帮助.