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

  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'添加')

猜你喜欢

转载自blog.csdn.net/birdflyinhigh/article/details/79557990
今日推荐