我正在尝试构建一个登录页面。我正在运行 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 样式是基于 Bootstrap 的
<!DOCTYPE html>
<html>
<head>
{% block head %}
<link rel = "stylesheet" href = "style.css" />
<title> {% block title %}{% endblock %} - My Webpage</title></div>
{% endblock %}
</head>
<body>
<div id = "content">{% block content %}{% endblock %}</div>
<div id = "footer">
{% block footer %}
© Copyright 2011 by <a href="http://domain.invalid/">you</a>
{% endblock %}
</div>
</body>
</html>
登录页面的 HTML 代码(文件名为 login.html):
{% extends "base.html" %}
{% block main %}
<div id = "login">
<form class = "form-horizontal" name = "LoginForm" action = "/login/" method = "post">
{% csrf_token %}
{% if next %}
<input type = "hidden" name = "next" value = "{{ next }}" />
{% endif %}
<div class = "control-group">
<label class = "control-label" for = "username">Username</label>
<div class = "controls">
<input type = "text" id = "username" placeholder = "Username">
</div>
</div>
<div class = "control-group">
<label class = "control-label" for = "password">Password</label>
<div class = "controls">
<input type = "password" name = "password" id = "password" placeholder = "Password">
</div>
</div>
<div class = "control-group">
<div class = "controls">
<button type = "submit" class = "btn">Login</button>
</div>
</div>
</form>
</div>
{% endblock %}
最佳答案
我有同样的错误,我这样做了并且成功了。 变化:
username = request.POST['username']
password = request.POST['password']
到:
username = request.POST.get('username')
password = request.POST.get('password')
上面处理了可能产生的 POST 和 GET 方法。 我希望这对您有所帮助。
关于python - 登录页面上的 POST 请求后在 Django 中生成 MultiValueDictKeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736141/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o