我正在尝试关注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 %}
如果是这种情况,在我申请表格所需的信息之前,如何呈现表格(如果我没有弄错,需要'返回'声明)?
答案 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.')