会话问题 - 但它是会话问题吗?

时间:2013-02-19 21:40:07

标签: django http session http-post httprequest

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

非常感谢

1 个答案:

答案 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>

上述表单会发布usernamepassword字段。我认为完整地阅读https://docs.djangoproject.com/en/dev/topics/auth/并学习如何使用内置用户管理的django是非常重要的。 Django提供User对象(它看起来像你正在使用)并提供管理其身份验证所需的所有功能。

这很重要,因为:

  1. 一旦你学会了它,比手动操作更容易
  2. 因为它更容易变得比自己管理身份验证更快
  3. 与手动操作相比,它不容易出错。 DJango源代码有很多眼睛看着它和许多测试覆盖它。请使用内置工具确保您网站的安全。