Flask-SQLAlchemy创建表 数据显示&表单添加 表单验证

创建表
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值