1. 程式人生 > >flask框架小案例

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