我有一个非常简单的表单,我正在尝试测试表单验证。我要离开Flask Megatutorial by Miguel Grinberg了。我刚遇到问题。
这里是追溯:
Traceback (most recent call last):
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/app/views.py", line 32, in login
if form.validate_on_submit():
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/flask_wtf/form.py", line 101, in validate_on_submit
return self.is_submitted() and self.validate()
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/wtforms/form.py", line 310, in validate
return super(Form, self).validate(extra)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/wtforms/form.py", line 152, in validate
if not field.validate(self, extra):
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/wtforms/fields/core.py", line 204, in validate
stop_validation = self._run_validation_chain(form, chain)
File "/Users/naman/Desktop/dev/pythonstuff/flaskStuff/microblog/flask/lib/python3.6/site-packages/wtforms/fields/core.py", line 224, in _run_validation_chain
validator(form, self)
TypeError: 'str' object is not callable
这是我的路线功能:
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
flash('Login requested for OpenID="{}", remember_me={}'.format(form.openid.data, str(form.remember_me.data)))
return redirect('/index')
return render_template('login.html',
title='Sign In',
form=form)
我检查了Flask-WTF文档,看来validate_on_submit
是一个函数,而不是一个字符串。 https://flask-wtf.readthedocs.io/en/stable/quickstart.html#validating-forms
有人可以帮帮我吗?
编辑:这是forms.py
的样子:
from flask_wtf import Form
from wtforms import StringField, BooleanField
from wtforms.validators import DataRequired
class LoginForm(Form):
openid = StringField('openid', validators=['DataRequired()'])
remember_me = BooleanField('remember_me', default=False)
答案 0 :(得分:1)
请按照以下方式修复您的LoginForm
,可以试试吗?
from flask_wtf import Form
from wtforms import StringField, BooleanField
from wtforms.validators import DataRequired
from wtforms import validators
class LoginForm(Form):
openid = StringField('openid', [validators.DataRequired()])
remember_me = BooleanField('remember_me', default=False)