後端 side project 就是要 泛舟 部落格啊,不然要幹嘛
照官方教學做一個基本的 CRUD 功能的部落格
首先建立專案之後再建立兩個資料夾
最好在這邊就開始版本控制,這樣比較能記得每一個段落在做什麼
Flask 應用程式是 Flask class 的 instance
首先我們使用工廠模式(application factory)
在函數內部建立 Flask 實體,而不是建立全域實體
所有和這個應用程式相關的設定都會在這個函數內部完成,然後回傳這個實體
建立檔案flaskr/__init__.py
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
create_app
是一個工廠模式的函數,後面會用到
這個看似簡單的函數其實已經做了很多事情
app = Flask(__name__, instance_relative_config=True)
__name__
是當前 Python 模組的名稱__name__
是一個方便的方法instance_relative_config=True
app.config.from_mapping():設定 App 的預設設定
DATABASE
:說明SQLite
資料庫文件存放的路徑app.config.from_pyfile():如果 config.py 存在的話,使用 config.py 中的值來覆蓋掉預設設定
例如正式部署的時候,設定一個正式的 SECRET_KEY
test_config
也會被傳送到工廠內,並起會取代原先實體的設定os.makedirs()
可以確保 app.instance_path 存在,因為 Flask 不會自動建立資料夾
但是必須確保這個資料夾存在,因為 SQLite 資料庫檔案會被保存在裡面
@app.route()
建立一個簡單的路由,這樣在繼續下面的內容之前可以先看看 App 如何運行的
它聲明了 URL /hello
和一個函數之間的關聯
這個函數會回傳一個 response,即一個 「Hello, World!」字串
使用指令列,或是進入你的 pipenv 虛擬環境中
pipenv install flask
export FLASK_APP=flaskr
export FLASK_ENV=development
flask run
接著就會看到終端機提示訊息
* Serving Flask app 'flaskr' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 681-825-908
在瀏覽器開啟 http://127.0.0.1:5000/hello
就會看到「Hello, World!」出現在畫面上
恭喜你,Flask 成功執行了!