flask框架小案例
阿新 • • 發佈:2018-12-09
前言
資料庫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>
測試
資料庫模型及初始化資料
開始測試
測試後