2017-07-30 62 views
1

我有一個非常簡單的表單,我試圖測試表單驗證。我要走出Flask Megatutorial by Miguel Grinberg。我剛剛遇到問題。Flask:TypeError:'str'對象在使用Flask-WTF進行驗證時無法調用

這裏的回溯:

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) 

我檢查瓶,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) 
+1

你可以在LoginForm類定義的地方顯示你的代碼嗎? –

+0

https://pastebin.com/zRq786ne 我在迷你Markdown中使用多行代碼很困難,所以我創建了一個pastebin。 – Naman

回答

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) 
+0

工作。謝謝! – Naman

+0

不客氣! – Yujiro

相關問題