综合案例-图书管理系统
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>