我陷入了这个小问题。我有一个用户需要登录的页面。登录后一切都很好。但是一旦用户登录,如果他使用enter
点击地址栏,则会出现此错误 - Key 'username' not found in <QueryDict: {}>
,并在页面上显示错误。
这是我登录的代码:
if request.path == '/cms/':
request.session['username'] = request.POST['username']
request.session['password'] = request.POST['password']
#check for login
if User.objects.exists():
u=User.objects.get(id=1)
if u.username==request.session['username'] and u.password==request.session['password']:
#do some stuff here, cos i am logged in
现在,如果我重新加载页面,那很好,但enter
没有。我应该将POST数据保存到会话中吗?实际上在这里发生了什么?
非常感谢
答案 0 :(得分:2)
request.POST
包含哪些内容?它不包含用户名。要找出它包含的内容,您可以打印request.POST,它应该显示在您的开发服务器上,或者您可以在某处记录该值,或者您可以使用import pdb; pdb.set_trace()
输入调试器并进行检查
python词典对于这种情况有get
方法
request.POST.get('username')
如果找不到密钥,则默认返回None
而不是KeyError
<form method="post" action="/yoururlhere/">
<input type="text" name="username" />
<input type="text" name="password" />
<input type="submit" value="submit" />
</form>
上述表单会发布username
和password
字段。我认为完整地阅读https://docs.djangoproject.com/en/dev/topics/auth/并学习如何使用内置用户管理的django是非常重要的。 Django提供User对象(它看起来像你正在使用)并提供管理其身份验证所需的所有功能。
这很重要,因为: