WTForms无法验证 - 没有错误

7

我遇到了一个关于WTForms库的奇怪问题。为了测试,我创建了一个只有一个字段的表单:

class ArticleForm(Form):
    content = TextField('Content')

它接收一个简单的字符串作为内容,现在我使用form.validate(),它无论什么原因都返回False。我查看了'FormField对象的validate()方法。我发现,如果错误列表的长度为零,则该字段返回true。这对我的测试是正确的,因为我没有得到任何错误。在shell中,我的字段验证返回True,如预期那样。表单对象中的validate()方法只是遍历字段并调用它们的validate()方法,只有当其中一个字段被验证为false时才返回false。因此,由于我的字段在没有任何错误的情况下进行了验证,我无法在代码中找到任何原因,导致form.validate()返回False。您有任何想法吗?
2个回答

7

在我看来,你只是向表单中传递了错误的值。以下是你需要使用这种表单的内容:

from wtforms import Form, TextField # This is wtforms 0.6

class DummyPostData(dict):
    """
    The form wants the getlist method - no problem.
    """
    def getlist(self, key):
        v = self[key]
        if not isinstance(v, (list, tuple)):
            v = [v]
        return v

class ArticleForm(Form):
    content = TextField('Content')

form = ArticleForm(DummyPostData({'content' : 'my content' }))
print form.validate()
#$ python ./wtf.py 
#True

PS:如果您提供更明确的信息,例如代码示例和WTForms的版本,那将会更好。


1
+1 是为了 DummyPostData。我认为它必须在 WTForms 内部。 - peterdemin
@paterdemin 谢谢! :) - Nikita Hismatov

0

你传递给表单构造函数的是什么?你没有提供表单如何使用的任何上下文。

表单的第一个参数必须是表单数据输入包装器。有效的包装器包括但不限于:

  • Django(request.POSTrequest.GET
  • Werkzeug(request.formrequest.args
  • WebOb(取决于;包括Pylon/Pyramid、TurboGears和Google App Engine Webapp框架)
  • cgi.FieldStorage或等效物

在类似Django的视图中使用的示例:

def view(request, article_id):
    article = Article.objects.get(article_id)
    form = ArticleForm(request.POST, obj=article)
    if request.POST and form.validate():
        # do something
    # render stuff, etc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接