Django身份验证文档中的MultiValueKeyDict错误

时间:2010-01-26 20:45:11

标签: django

我正在尝试关注http://docs.djangoproject.com/en/1.1/topics/auth/中有关用户登录的代码。

def my_view(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)
             HttpResponseRedirect('/%s/'%username) 
         else:
             #Logic will go here later
             pass
     else:
         # Return an 'invalid login' error message.
         pass

我的问题是,当我尝试使用这个新视图时,我收到以下错误消息:  ('期望缩进块',('C:\ emodel_tracking \ .. \ emodel_tracking \ tracker \ views.py',50,4,'else:\ n'))

我看不出else语句中的格式是如何错误的;我正在使用django文档中的代码。任何想法“else”声明有什么问题?

编辑:好的,使用pass修复了那个错误 - 现在我开始了解:/ login /中的MultiValueDictKeyError ---在QueryDict中找不到密钥'用户名':{}。思考?我不太清楚如何继续 - 我的猜测是我需要以某种方式将它绑定到类似于这个的html表单:

  {% extends "base.html" %}

  {% block content %}

  {% if form.errors %}
    <p class="error">Sorry, that's not a valid username or password</p>
  {% endif %}

  <form action="" method="post">
    <label for="username">User name:</label>
    <input type="text" name="username" value="" id="username">
    <label for="password">Password:</label>
    <input type="password" name="password" value="" id="password">

    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next|escape }}" />
  </form>

{% endblock %}

如果是这种情况,在我申请表格所需的信息之前,如何呈现表格(如果我没有弄错,需要'返回'声明)?

3 个答案:

答案 0 :(得分:5)

回答你的第二个问题:
执行视图时,它会尝试从POST数据中读取用户名。

这意味着,只有在提交表单后(例如,通过POST以及用户名和密码数据)才能访问您的视图,或者您必须更改视图:

def my_view(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        # gon on ...
    else:
        # just show the form

顺便说一下,关注this tutorial比从文档页面复制和粘贴代码片段更好,并尝试使其正常工作。这些只是片段,它们不包含所有必需的代码 难怪代码无效。

阅读Django书,然后你可以询问是否有什么东西不起作用。

答案 1 :(得分:2)

“其他”中没有任何内容; 如果你不想做某事,那就说pass。 django文档希望你在那里实现自己的代码,所以如果你没有放任何东西,它会将其检测为缩进错误。如果你没有任何代码可以实现,你可以将python提示为ignore else。

else:
    pass

答案 2 :(得分:1)

而不是建议的pass,实际上放一些东西可能是个好主意。

我在调试中使用简单错误,但您可能想要重定向到某种错误页面。无论哪种方式,这是一种提醒用户的简约方法。

return HttpResponse('ERROR: Account Disabled.')