创建表
if name == ‘main’:
db.drop_all()
db.create_all()
app.run(debug=True)
查看创建结果
show tables;
创建表
查看author表结构
desc author;
author表结构
查看books表结构
desc books;
books表结构
添加测试数据
#生成数据
au1 = Author(name=‘老王’)
au2 = Author(name=‘老尹’)
au3 = Author(name=‘老刘’)
#把数据提交给用户会话
db.session.add_all([au1, au2, au3])
#提交会话
db.session.commit()
bk1 = Book(name=‘老王回忆录’, author_id=au1.id)
bk2 = Book(name=‘我读书少,你别骗我’, author_id=au1.id)
bk3 = Book(name=‘如何才能让自己更骚’, author_id=au2.id)
bk4 = Book(name=‘怎样征服美丽少女’, author_id=au3.id)
bk5 = Book(name=‘如何征服英俊少男’, author_id=au3.id)
#把数据提交给用户会话
db.session.add_all([bk1, bk2, bk3, bk4, bk5])
#提交会话
db.session.commit()
生成数据后,查看数据:
数据显示
定义路由函数,并将 Author 和 Book 的所有结果传到模板
@app.route(’/’,methods=[‘GET’,‘POST’])
def index():
author = Author.query.all()
book = Book.query.all()
return render_template(‘index.html’,author=author,book=book)
定义表单类
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
from wtforms import StringField,SubmitField
#创建表单类,用来添加信息
class Append(FlaskForm):
au_info = StringField(validators=[DataRequired()])
bk_info = StringField(validators=[DataRequired()])
submit = SubmitField(u’添加’)
表单验证
@app.route(’/’, methods=[‘get’, ‘post’])
def index():
append_form = Append()
if request.method == 'POST':
if append_form.validate_on_submit():
author_name = append_form.au_info.data
book_name = append_form.bk_info.data
# 判断数据是否存在
author = Author.query.filter_by(name=author_name).first()
if not author:
try:
# 先添加作者
author = Author(name=author_name)
db.session.add(author)
db.session.commit()
# 再添加书籍
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
except Exception as e:
db.session.rollback()
print e
flash("数据添加错误")
else:
book_names = [book.name for book in author.books]
if book_name in book_names:
flash('该作者已存在相同的书名')
else:
try:
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
except Exception as e:
db.session.rollback()
print e
flash('数据添加错误')
else:
flash('数据输入有问题')
authors = Author.query.all()
books = Book.query.all()
return render_template('test2.html', authors=authors, books=books, append_form=append_form)