flask框架-数据库

综合案例-图书管理系统

from flask import Flask, render_template, flash, redirect
from wtforms import StringField, SubmitField
from flask_wtf import FlaskForm
from flask_sqlalchemy import SQLAlchemy
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/books'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'shjsjdsagd29eu'
db = SQLAlchemy(app)


class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    author_id = db.Column(db.Integer, db.ForeignKey("author.id"))


class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    books = db.relationship("Book", backref="author")


class BookForm(FlaskForm):
    book_name = StringField(label='书籍名:', validators=[DataRequired('书籍名不能为空')])
    author_name = StringField(label='作者名:', validators=[DataRequired('作者名不能为空')])
    submit = SubmitField('添加')


@app.route('/')
def index():
    book_from = BookForm()
    author = Author.query.all()
    return render_template("book_show.html", book_from=book_from, author=author)


@app.route('/add_book', methods=['POST'])
def add_book():
    book_form = BookForm()
    book_name = book_form.book_name.data
    author_name = book_form.author_name.data
    author = Author.query.filter(Author.name == author_name).first()
    if author:
        if not Book.query.filter(Book.name == book_name,Book.author_id == author.id).first():
            book = Book()
            book.name = book_name
            book.author_id = author.id
            db.session.add(book)
            db.session.commit()
            flash('添加书籍成功')
        else:
            flash('添加失败,该书籍已存在')
    else:
        author = Author()
        author.name = author_name
        db.session.add(author)
        db.session.commit()
        book = Book()
        book.name = book_name
        book.author_id = author.id
        db.session.add(book)
        db.session.commit()
        flash('添加作者和书籍成功')
    return redirect('/')


if __name__ == "__main__":
    # db.drop_all()
    db.create_all()

    # au1 = Author()
    # au1.name = '老王'
    # au2 = Author()
    # au2.name = '老李'
    # au3 = Author()
    # au3.name = '老六'
    # db.session.add_all([au1, au2, au3])
    # db.session.commit()
    # book1 = Book()
    # book1.name = '从前有座山'
    # book1.author_id = au1.id
    # book2 = Book()
    # book2.name = '葫芦娃'
    # book2.author_id = au2.id
    # book3 = Book()
    # book3.name = '小金刚'
    # book3.author_id = au3.id
    # db.session.add_all([book1, book2, book3])
    # db.session.commit()

    app.run(debug=True)

./templates/book_show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/add_book" method="post">
    {{ book_from.csrf_token }}
    {{ book_from.book_name.label }}{{ book_from.book_name }}<br>
    {{ book_from.author_name.label }}{{ book_from.author_name }}<br>
    {{ book_from.submit }}
    <span style="color:red">
        {% for msg in get_flashed_messages() %}
            {{ msg }}
        {% endfor %}
    </span>
</form>
<h2>书籍展示</h2>
{% for a in author %}
    <ul>
        <li>作者名:{{ a.name }}</li>
        <br>
        <ul>
            <li>书籍名:
            {% for book in a.books %}
                {{ book.name }}
            {% endfor %}
            </li>
        </ul>
    </ul>
{% endfor %}

</body>
</html>

猜你喜欢

转载自blog.csdn.net/sdzhr/article/details/81700493