实现增删有意思的书

# coding=utf-8
"""
"""""
from flask import Flask, flash, redirect, render_template
from flask.ext.sqlalchemy import SQLAlchemy


from flask.ext.wtf import FlaskForm


from wtforms import StringField, SubmitField


from wtforms.validators import DataRequired


app = Flask(__name__)




# 数据库配置信息
class Config(object):
    SECRET_KEY = 'skdskxco'
    SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@localhost:3306/library"
    SQLALCHEMY_TRACK_MODIFICATIONS = False




app.config.from_object(Config)
db = SQLAlchemy(app)




# 编写模型类
# 一个作者可以写多本书
class Author(db.Model):
    __tablename__ = 'authors'


    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    books = db.relationship("Book", backref='author', lazy='dynamic')




# 一本书只有一个作者
class Book(db.Model):
    __tablename__ = 'books'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    author_id = db.Column(db.ForeignKey(Author.id))




# 定义表单类
class BookForm(FlaskForm):
    bookname = StringField(u'书名', validators=
    [DataRequired()],render_kw={"placeholder":u'请输入用户名'})




    authorname = StringField(u'作者', validators=
    [DataRequired()], render_kw={"placeholder": u'请输入作者'})


    submit = SubmitField(u'提交')




# 展示书籍
@app.route('/')
def index():
    # 1创建表单
    form = BookForm()


    # 2 查询数据
    authors = Author.query.all()


    # 3.将数据渲染到页面
    return render_template('file04.html', form=form, authors=authors)




# 添加书籍
@app.route('/add_book', methods=['POST'])
def add_book():
    # 1.创建表单
    form = BookForm()
    # 2校验表单
    if form.validate_on_submit():
        # 获取到参数,作者名,书名
        authorname = form.authorname.data


        bookname = form.bookname.data


        author = Author.query.filter(Author.name == authorname).first()


        # 判断
        if author:
            # 查询作者底下,是否由该书名
            book = Book.query.filter(Book.name == bookname, Book.author_id == author.id).first()


            # 该书存在
            if book:
                flash(u'该作者已经由该书了')
            else:
                book = Book(name=bookname, author_id=author.id)
                db.session.add(book)


                db.session.commit()
        else:
            # 创建作者,和书,添加到数据库
            author = Author(name=authorname)
            db.session.add(author)
            db.session.commit()


            book=Book(name=bookname,author_id=author.id)


            db.session.add(book)
            db.session.commit()


    # 3响应
    return redirect('/')




# 删除书籍
@app.route('/delete_book/<int:id>')
def delete_book(id):
    # 1根据编号获取到书籍
    book = Book.query.get(id)


    # 2删除,提交
    db.session.delete(book)
    db.session.commit()
    # 3重定向到展示页面
    return redirect("/")




# 删除作者和作者所有关联的书籍


@app.route('/delete_author/<int:id>')
def delete_author(id):
    # 1.通过编号获取到作者对象
    author = Author.query.get(id)
    # 2获取到作者,所有的书籍
    books = author.books
    # 3删除书籍,作者,提交
    for book in books:
        db.session.delete(book)


    db.session.delete(author)


    db.session.commit()
    # 4.重定向到显示页面
    return redirect("/")




# @app.route('/')
# def index():
#     return 'hello'




if __name__ == '__main__':
    # 先删除所有的表
    db.drop_all()


    # 创建所有的表
    db.create_all()
    # 添加测试数据
    # 生成数据
    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()


    app.run(debug=True)




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书</title>
</head>
<body>


<form action="/add_book" method="post">
    {{ form.csrf_token }}


    {{ form.bookname.lable }}&nbsp;&nbsp;&nbsp;
    {{ form.bookname }}<br>
    {#    <br><br>#}
    {{ form.authorname.label }}&nbsp;&nbsp;&nbsp;
    {{ form.authorname }}
    <br>


    {{ form.submit }}


    {% for message  in get_flashed_messages() %}


        <h4 style="color: blue">{{ message }}</h4>


    {% endfor %}




</form>


<form action="">
    <ul>
        {% for author in authors %}
            <li>{{ author.name }}<a href="{{ url_for('delete_author',id=author.id) }}">删除</a></li>
            <ul>
                {% for  book  in author.books  %}
                    <li>{{ book.name }}<a href="{{ url_for('delete_book',id=book.id) }}">删除</a></li>


                {% endfor %}


            </ul>
        {% endfor %}




    </ul>


</form>




</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值