flask專案之圖書案例
今天通過一個圖書小案例來演示一下flask專案的建立與應用,這個只是最簡單的專案建立,但是隻要掌握了這個思想,大型的專案也不在話下的。當然還是需要掌握其他很多的知識的!
廢話不多說,我們直接上程式碼(這是基於Python2.7的演示程式):
#coding:utf-8
from flask import Flask, render_template, flash, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app=Flask(__name__)
#專案配置資訊
class Config(object):
DEBUG=True
#連線mysql資料的資訊
SQLALCHEMY_DATABASE_URI="mysql://root:mysql@127.0.0.1:3306/author_book"
#讓sqlalchemy跟蹤資料庫的修改
SQLALCHEMY_TRACK_MODIFICATIONS=True
SECRET_KEY="DSKFSDJKFHSKDKCNIASNCFIOFASNDCIOSANCIOSNIOCN"
app.config.from_object(Config)
#建立sqlalchemy資料庫的連線物件
db=SQLAlchemy(app)
class Author(db.Model):
__tablename__="tbl_authors"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(64),unique=True)
books=db.relationship("Book",backref="author")
class Book(db.Model):
__tablename__="tbl_books"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(64),unique=True)
author_id=db.Column(db.Integer,db.ForeignKey('tbl_authors.id'))
class AuthorBookForm(FlaskForm):
author_name=StringField(label=u"作者",validators=[DataRequired()])
book_name=StringField(label=u"書籍",validators=[DataRequired()])
submit=SubmitField(label=u"提交")
@app.route('/',methods=["GET","POST"])
def index():
form=AuthorBookForm()
error_msg = ""
if form.validate_on_submit():
author_name=form.author_name.data
book_name=form.book_name.data
author_count=Author.query.filter_by(name=author_name).count()
if author_count==0:
author=Author(name=author_name)
db.session.add(author)
db.session.commit()
book_count=Book.query.filter_by(name=book_name).count()
if book_count==0:
book=Book(name=book_name,author_id=author.id)
db.session.add(book)
db.session.commit()
else:
error_msg=(u"該圖書已經存在")
db.session.delete(Author.query.filter_by(name=author_name)[0])
else:
book_count = Book.query.filter_by(name=book_name).count()
author=Author.query.filter_by(name=author_name)[0]
if book_count==0:
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
else:
error_msg = (u"該圖書已經存在")
# 查詢資料庫
authors = Author.query.order_by(Author.id.desc()).all()
return render_template("author_book.html",authors=authors,form=form,error_msg=error_msg)
@app.route("/delete_book/<int:id>")
def delete_book(id):
book=Book.query.get(id)
db.session.delete(book)
db.session.commit()
return redirect(url_for("index"))
if __name__ == '__main__':
#刪除資料庫中所有的表
db.drop_all()
#建立所有的表
db.create_all()
au_xi=Author(name="郭敬明")
au_qian=Author(name="韓寒")
au_san=Author(name="唐家三少")
db.session.add_all([au_xi,au_qian,au_san])
db.session.commit()
bk_xi=Book(name='吞噬星空',author_id=au_xi.id)
bk_xi2=Book(name="寸芒",author_id=au_qian.id)
bk_qian=Book(name="縹緲之旅",author_id=au_qian.id)
bk_san=Book(name="冰火魔廚",author_id=au_san.id)
db.session.add_all([bk_qian,bk_san,bk_xi,bk_xi2])
db.session.commit()
app.run()
下圖為專案展示介面:
1.首先,我們匯入了 Flask 類。這個類的例項將會是我們的 WSGI 應用程式。
2.接下來,我們建立一個該類的例項,第一個引數是應用模組或者包的名稱。 如果你使用單一的模組(如本例),你應該使用 name ,因為模組的名稱將會因其作為單獨應用啟動還是作為模組匯入而有不同( 也即是 ‘main’ 或實際的匯入名)。這是必須的,這樣 Flask 才知道到哪去找模板、靜態檔案等等。詳情見 Flask 的文件。
3.然後,我們使用 route() 裝飾器告訴 Flask 什麼樣的URL 能觸發我們的函式。
這個函式的名字也在生成 URL 時被特定的函式採用,這個函式返回我們想要顯示在使用者瀏覽器中的資訊。
4.最後我們用 run() 函式來讓應用執行在本地伺服器上。 其中 if name == ‘main‘: 確保伺服器只會在該指令碼被 Python 直譯器直接執行的時候才會執行,而不是作為模組匯入的時候。
該專案可以實現向資料庫中新增作者和圖書,並且立即顯示到當前介面,也可以選擇性的刪除圖書,任何更改都會在展示介面立即更新。
以上就是這個小專案,不做過多解釋,讀者可以將程式碼拿走自己除錯。
相關文章
- 17、flask-圖書簡單館專案Flask
- flask部落格專案之tinymce圖片上傳Flask
- Flask前後端分離專案案例Flask後端
- 專案策劃書案例
- flask 專案拆分Flask
- Ubuntu 22.04 + Pycharm + Flask 配置 Flask 專案UbuntuPyCharmFlask
- flask專案1實戰:2.2 flask框架下使用圖片驗證碼Flask框架
- Flask專案生成ModelFlask
- CentOS 部署 flask專案CentOSFlask
- Flask01 第一個flask專案Flask
- 專案管理之風險管理案例-專案交付風險專案管理
- Flask web專案 gunicorn部署FlaskWeb
- 圖書管理系統-專案介紹
- 《python專案開發案例集錦》讀書筆記Python筆記
- flask 專案開發實戰Flask
- flask框架圖書管理系統客戶端Flask框架客戶端
- 實驗專案四:圖書管理系統
- 使用Flask-Avatars在Flask專案裡設定頭像Flask
- 如何在 Flask 專案中使用 MQTTFlaskMQQT
- 用uWSGI和Nginx部署Flask專案NginxFlask
- 01-Flask-初始化專案Flask
- 13-flask部落格專案之restful api詳解2-使用FlaskRESTAPI
- flask框架圖書管理系統伺服器端Flask框架伺服器
- JavaWeb尚矽谷書城專案思維導圖JavaWeb
- Flask框架(之六)藍圖和子域名Flask框架
- Flask實戰腳手架-專案建立Flask
- Flask專案常見面試問題Flask面試
- Flask 專案中解決csrf攻擊Flask
- flask 專案中使用 bootstrapFileInput(進階篇)Flaskboot
- flask 專案中使用 bootstrapFileInput(構建篇)Flaskboot
- flask-restful 大型專案結構示例FlaskREST
- 10RMB/月不到部署FLASK網站專案(flask+gunicorn+nginx)Flask網站Nginx
- 在 Flask 專案中使用 Celery(with 工廠模式 or not)Flask模式
- Python專案案例開發從入門到實戰 - 書籍資訊Python
- 影像匹配(大圖中找小圖)之新專案findimage
- Django入門案例:圖書管理系統Django
- Python爬蟲小專案:爬一個圖書網站Python爬蟲網站
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(5) - Flask中的ORM使用Python全棧工程師網頁FlaskORM