【发布时间】:2010-07-23 03:51:54
【问题描述】:
我要做的是在form.is_valid() 和form.save() 之后为视图中的字段添加一个错误,它似乎有效,但只是因为黑客攻击,我希望有人这里可以解释它为什么起作用。
所以在我的表单的save() 函数中,我连接到一个LDAP 服务器,并尝试验证表单中提供的用户和密码。如果一切正常,最终会发生User 对象和Profile 对象被创建。但是,在用于连接到 LDAP 并从 LDAP 获取数据的代码中,可能会发生错误,例如凭据错误或根本无法绑定到服务器。在这种情况下,我返回None,然后我的视图通过向表单添加错误来处理它。这是视图中的相关代码:
if form.is_valid():
profile = form.save()
if profile is None:
# there was an LDAP error
msg = u"An error ocurred trying to authenticate over LDAP. Try again."
form = form_class(request.POST)
print form
form._errors['user_name'] = ErrorList([msg])
return render_to_response(template_name, locals())
现在,在注释掉该打印语句后,当我尝试将错误添加到表单时,我得到了 'NoneType' object does not support item assignment。如果我取消注释打印语句,它会像我期望的那样工作。关于为什么的任何想法?无论如何,我可以在没有打印语句的情况下做到这一点?谢谢!
PS:我不想在 clean 方法中进行表单验证,因为我不想绑定到 LDAP 服务器并尝试对用户进行两次身份验证,我只希望它发生一次并且它要么工作或不工作。
【问题讨论】:
标签: django ldap django-forms django-validation