-1

我被困在这个小问题上。我有一个用户需要登录的页面。登录后一切都很好。但是一旦用户登录,如果他点击地址栏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 数据保存到会话中吗?这里到底发生了什么?

多谢

4

1 回答 1

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>

上面的表格将发布usernameandpassword字段。我认为完整阅读https://docs.djangoproject.com/en/dev/topics/auth/并学习如何使用用户管理中内置的 django 非常重要。Django 提供了 User 对象(看起来你正在使用)并提供所有必要的功能来管理他们的身份验证。

这很重要,因为:

  1. 一旦你学会了,它比手动做更容易
  2. 因为它更容易,所以它很可能比自己管理身份验证更快
  3. 与手动操作相比,它更不容易出错。DJango 源代码有很多人关注它,并且有很多测试覆盖它。请使用内置工具来确保您的站点安全。
于 2013-02-19T21:43:41.507 回答