您的位置:首页 > 大数据 > 人工智能

Bug: _run_validation_chain validator(form, self) TypeError: __init__() takes at most 2 arguments (3

2018-03-14 17:43 996 查看
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/python/Desktop/day03/bookmanager/bookmanager.py", line 70, in index
    if form.validate_on_submit():
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/flask_wtf/form.py", line 101, in validate_on_submit
    return self.is_submitted() and self.validate()
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/wtforms/form.py", line 310, in validate
    return super(Form, self).validate(extra)
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/wtforms/form.py", line 152, in validate
    if not field.validate(self, extra):
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/wtforms/fields/core.py", line 204, in validate
    stop_validation = self._run_validation_chain(form, chain)
  File "/home/python/.virtualenvs/flask_py2/lib/python2.7/site-packages/wtforms/fields/core.py", line 224, in _run_validation_chain
    validator(form, self)
TypeError: __init__() takes at most 2 arguments (3 given)

# coding: utf-8

from flask import Flask, render_template,request,redirect, flash, url_for,request
from config import Config
# 1. 导入Alchemy对象
from flask_sqlalchemy import SQLAlchemy
# 导入表单类
from flask_wtf import FlaskForm
# 导入表单字段
from wtforms import StringField, SubmitField
# 导入验证函数
from wtforms.validators import DataRequired

# 定义表单类,继承自FlaskForm, 在该类中定义字段
class Form(FlaskForm):
"""定义模型表格"""
book = StringField(validators=[DataRequired])
author = StringField(validators=[DataRequired])
submit = SubmitField(label=u'添加')

app = Flask(__name__)
app.config.from_object(Config)

# 2. 实例化SQLALchemy
db = SQLAlchemy(app)

# 3. 定义数据表

class Author(db.Model):
"""定义作者"""
__tablename__ = 'author'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
au_book = db.relationship('Book', backref='author')

class Book(db.Model):
"""定义书籍数据表"""
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
author_id = db.Column(db.Integer, db.ForeignKey('author.id'))

@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
# 实例化Flaskform
form = Form()
# 查询数据库,显示数据
try:
books = Book.query.all()
authors = Author.query.all()
except:
flash(u'错误,信息不存在')

context = {
'books': books,
'authors': authors,
'form': form,
}
return render_template('index.html', **context)
else:
form = Form()
if form.validate_on_submit():
book_name = form.book.data
author_name = form.author.data
author = Author(name=author_name)
db.session.add(author)
db.session.commit()
author_id = Author.query.get(name=author_name)
book = Book(name=book_name, author_id=author_id)
db.session.add(book)
db.session.commit()
return redirect(url_for('index'))
else:
flash('数据输入错误')
return redirect(url_for('index'))

@app.route('/delete_book/<int:id>', methods=['GET', 'POST'])
def delete_book(id):
"""删除单条记录的视图函数"""
# 查询对应id的数据库记录
book = Book.query.get(id)
db.session.delete(book)
db.session.commit()

return redirect(url_for('index'))

@app.route('/delete_author/<int:id>', methods=['GET', 'POST'])
def delete_author(id):
"""删除单条记录的视图函数"""
# 查询对应id的数据库记录
author = Author.query.get(id)
db.session.delete(author)
db.session.commit()

return redirect(url_for('index'))

if __name__ == '__main__':
app.run(debug=True)
解决办法: 
Datarequired是一个函数,写成了DataRequired了# 定义表单类,继承自FlaskForm, 在该类中定义字段
class Form(FlaskForm):
"""定义模型表格"""
book = StringField(validators=[DataRequired()])
author = StringField(validators=[DataRequired()])
submit = SubmitField(label=u'添加')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐