flask框架小案例

前言

数据库db_ab
表tbl_authors、tbl_books
flask补充:id默认情况,从1开始,自动增长

代码(app.py

# -*- coding:utf-8 -*-


from flask import Flask, render_template, url_for, request, redirect
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)


class Config(object):
	"""配置参数"""
	# sqlalchemy的配置参数
	SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/db_ab"
	# 设置sqlalchemy自动跟踪数据库
	SQLALCHEMY_TRACE_MODIFICATIONS = True
	# 设置秘钥
	SECRET_KEY = "ABCDEFG1234567"


app.config.from_object(Config) # 配置参数
db = SQLAlchemy(app)


# 数据库模型
class Author(db.Model):
	"""作者"""
	__tablename__ = "tbl_authors" # 数据库中的表名
	
	id = db.Column(db.Integer, primary_key=True)
	name = db.Column(db.String(32))
	
	books = db.relationship("Book", backref="author")  # 方便查询

"""
 在author_book.html中使用方便查询
<ul>
    {% for author in authors %}
    <li>作者:{{ author.name }}</li>
    <ul>
        {% for book in author.books %}
        <li>书籍:{{book.name}}
        <a href="/delete_book?book_id={{book.id}}">删除</a>
        </li>
        {% endfor %}
    </ul>
    {% endfor %}
</ul>
"""


class Book(db.Model):
	"""书籍"""
	__tablename__ = "tbl_books"
	id = db.Column(db.Integer, primary_key=True)
	name = db.Column(db.String(64))
	author_id = db.Column(db.Integer, db.ForeignKey("tbl_authors.id"))


# 表单模型
class AuthorBookForm(Form):
	"""表单模型"""
	author_name = StringField(label=u"作者", validators=[DataRequired(u"作者不能为空!")])
	book_name = StringField(label=u"书籍", validators=[DataRequired(u"书籍不能为空!")])
	submit = SubmitField(label=u"保存")


@app.route("/", methods=["GET", "POST"])
def index():
	# 提交表单数据
	form = AuthorBookForm() # 表单对象实例
	if form.validate_on_submit():
		# 表单数据通过验证
		# 获取表单数据
		author_name = form.author_name.data
		book_name = form.book_name.data
		# 保存到数据库
		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()
	
	# 查询作者,返回列表
	author_li = Author.query.all()
	return render_template("author_book.html", authors=author_li, form=form)


@app.route("/delete_book", methods=["GET"])
def delete_book(): # 删除书籍
	# 获取参数
	book_id = request.args.get("book_id")
	# 删除数据
	book = Book.query.get(book_id)
	db.session.delete(book)
	db.session.commit()
	return redirect(url_for("index"))


def testdata(): # 测试数据
	db.drop_all()
	db.create_all()
	
	author1 = Author(name="吴承恩")
	author2 = Author(name="曹雪芹")
	author3 = Author(name="罗贯中")
	author4 = Author(name="施耐庵")
	author5 = Author(name="孔子")
	db.session.add_all([author1, author2, author3, author4, author5])
	db.session.commit()
	
	book1 = Book(name="西游记", author_id=author1.id)
	book2 = Book(name="红楼梦", author_id=author2.id)
	book3 = Book(name="三国演义", author_id=author3.id)
	book4 = Book(name="水浒传", author_id=author4.id)
	book5 = Book(name="论语", author_id=author5.id)
	book6 = Book(name="春秋", author_id=author5.id)
	db.session.add_all([book1, book2, book3, book4, book5, book6])
	db.session.commit()


if __name__ == "__main__":
	testdata()
	app.run(debug=True)


代码(author_book.html)

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

<form method="POST">
    {{ form.csrf_token }}

    {{ form.author_name.label }}:
    <p>{{form.author_name}}
    {% for msg in form.author_name.errors %}
    {{msg}}
    {% endfor %}</p>

    {{ form.book_name.label }}:
    <p>{{form.book_name}}
    {% for msg in form.book_name.errors %}
    {{msg}}
    {% endfor %}</p>

    <p>{{ form.submit }}</p>
</form>

<hr/>

<ul>
    {% for author in authors %}
    <li>作者:{{ author.name }}</li>
    <ul>
        {% for book in author.books %}
        <li>书籍:{{book.name}}
        <a href="/delete_book?book_id={{book.id}}">删除</a>
        </li>
        {% endfor %}
    </ul>
    {% endfor %}
</ul>

</body>
</html>

测试

数据库模型及初始化数据

1
2
3

开始测试

4

测试后

5
6

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84928706
今日推荐