Flask之藍圖
阿新 • • 發佈:2020-07-09
一、什麼是藍圖
藍圖的基本設想是它們記錄註冊到一個應用時的操作執行情況。 當從一個端點到另一端分發請求和生成 URL 時,Flask 關聯檢視函式和藍圖。也就是隨著我們開發程式越來越大,將程式碼進行模組化管理。我們之前可能是將所有程式碼都寫在一個py檔案,例如:
from flask import Flask app = Flask(__name__) @app.route('/home') def home(): return "home" @app.route('/login') def login(): return "login" if __name__== '__main__': app.run()
隨著功能越來越多,功能之間也需要進行區分,此時我們可以將同一功能的模組寫在一個py檔案,這樣可以將這一個py檔案當作一個藍圖,然後每一個藍圖註冊到app中就可以了。
二、簡單專案結構設計
I:. │ run.py │ ├─.idea │ │ encodings.xml │ │ flaskPro.iml │ │ misc.xml │ │ modules.xml │ │ workspace.xml │ │ │ └─inspectionProfiles │ Project_Default.xml │ └─flaskPro │__init__.py │ ├─statics │ home.css │ ├─templates │ home.html │ login.html │ ├─views │ │ account.py │ │ blogs.py │ │ │ └─__pycache__ │ account.cpython-35.pyc │ blogs.cpython-35.pyc │ └─__pycache____init__.cpython-35.pyc
這是flask專案flaskPro下的樹形結構,可以看到主要是run.py檔案和flaskPro包。
1、run.py
這是整個專案的入口檔案,啟動專案就從這個檔案開始。
from flaskPro import app #從flaskPro 包匯入app物件 if __name__ == '__main__': app.run()
2、flaskPro
run.py中的app物件就是從這個包匯入的,首先就是在這個包中的__init__.py檔案中:
from flask import Flask # 將Flask進行例項化,傳入響應的引數,其中static_url_path是靜態檔案地址路徑 app = Flask(__name__,template_folder='templates',static_folder='statics',static_url_path='/static') # 將所有的藍圖匯入進來,相當於彙總 from .views.account import account from .views.blogs import blogs # 將所有的藍圖再注入到app中,這樣進行同一,請求一旦進來,由app統一分發 app.register_blueprint(account) #不加字首 http://127.0.0.1:5000/login app.register_blueprint(blogs,url_prefix='/blogs') #可以加入字首,http://127.0.0.1:5000/blogs/home
可以看到在這個檔案中主要做下面幾件事:
- 例項化Flask物件app
- 匯入所有的藍圖
- 將藍圖注入到app物件
那麼,這個包中剩下的views、templates、statics目錄分別是藍圖檔案、模板檔案、靜態檔案。比如,views中的blogs藍圖檔案:
from flask import Blueprint from flask import render_template from flask import request blogs = Blueprint('blogs',__name__) @blogs.route('/home') def home(): return render_template('home.html')
templates檔案中home.html檔案:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="/static/home.css" type="text/css" rel="stylesheet"> </head> <body> <h1>home</h1> </body> </html>
這就是通過藍圖設計一個簡單專案的結構。
三、複雜專案結構設計
I:. │ run.py │ ├─.idea │ │ encodings.xml │ │ flaskPro2.iml │ │ misc.xml │ │ modules.xml │ │ workspace.xml │ │ │ └─inspectionProfiles │ Project_Default.xml │ └─flaskPro2 │ __init__.py │ ├─admin │ │ views.py │ │ __init__.py │ │ │ ├─statics │ ├─templates │ └─__pycache__ │ views.cpython-35.pyc │ __init__.cpython-35.pyc │ ├─web │ │ views.py │ │ __init__.py │ │ │ ├─statics │ ├─templates │ └─__pycache__ │ views.cpython-35.pyc │ __init__.cpython-35.pyc │ └─__pycache__ __init__.cpython-35.pyc
這是flask專案flaskPro2下的樹形結構,可以看到主要是run.py檔案和flaskPro2包。
1、run.py
這是整個專案的入口檔案,啟動專案就從這個檔案開始。
from flaskPro2 import app #從flaskPro2 包匯入app物件
if __name__ == '__main__':
app.run()
2、flaskPro2
run.py中的app物件就是從這個包匯入的,首先就是在這個包中的__init__.py檔案中:
from flask import Flask from .admin import admin from .web import web app = Flask(__name__) #app物件 # 注入藍圖 app.register_blueprint(admin,url_prefix='/admin') app.register_blueprint(web,url_prefix='/web')
注意的是這裡的每一個藍圖又相當於是每一個app一樣。比如web藍圖,在web包的__init__.py檔案中建立藍圖物件:
from flask import Blueprint web = Blueprint( 'web', __name__, template_folder='templates', static_url_path='static' ) #每一個藍圖有自己獨立的模板資料夾和靜態資料夾 from . import views #這裡的views檔案是必須匯入的,否則不執行views中路由注入,會導致找不到web下的路由
在views.py檔案中:
from . import web @web.route('/home') def home(): return 'home'
其餘的藍圖與這個是一樣的。