實戰(zhàn)腳手架準(zhǔn)備分三部曲
Flask實戰(zhàn)腳手架 (后端+restful api)
Yii2實戰(zhàn)腳手架 (后端+restful api)
Vue2實戰(zhàn)腳手架(前端)
Flask實戰(zhàn)腳手架 (后端+restful api)
學(xué)習(xí)Flask從實戰(zhàn)開始霞篡,制作一個web常用的腳手架霉囚,已備以后快速開發(fā)涉瘾。
項目git地址第一次提交
暫定功能模塊:
- 用戶模塊
- 文章模塊
用到的python插件:
Flask-Login #用戶登陸
Flask-Migrate #數(shù)據(jù)庫管理工具
Flask-DebugToolbar #dubug工具欄
Flask-SQLAlchemy #ORM
Flask-WTF #表單
項目目錄結(jié)構(gòu)
myweb
│
└───app #此為應(yīng)用主目錄
│ │
│ └───backend #應(yīng)用分組模塊,這樣區(qū)分的好處是結(jié)構(gòu)化
│ │ │ __init__.py
│ │ │ forms.py #表單集合
│ │ │ views.py #路由
│ │
│ └───static #靜態(tài)的文件萍歉,如jpg贱呐、css、js
│ │ │ ...
│ │
│ └───templates #模板文件
│ │ └───backend #對應(yīng)app/backend模板目錄
│ │ └───layout #模板布局目錄
│ │
│ │ __init__.py
│ │ cli.py #這里集中管理注冊的命令
│ │ config.py #這里集中管理配置的文件
│ │ models.py #這里集中管理數(shù)據(jù)模型
│
│ run.py #單獨剝離出來的運行文件,文件調(diào)試悠汽,比如```cli箱吕、flask shell```
│
└───venv #python3 -m venv venv虛擬環(huán)境
項目的結(jié)構(gòu)化的整理主要是為了合理的管理項目,但都是自由化的柿冲,比如
app/models.py
他是管理數(shù)據(jù)模型的里面有User茬高、News...
等,但是當(dāng)表模型很多的情況下完全可以升級他假抄,比如刪除models.py
接著新建一個models
文件夾怎栽,在里面創(chuàng)建User.py耕渴、News.py...
一切的一切只是為了更好的管理項目琉兜。
1. 搭建虛擬環(huán)境
創(chuàng)建一個目錄myweb,并進(jìn)入目錄饲鄙,創(chuàng)建python3的虛擬環(huán)境
mkdir myweb && cd myweb
python3 -m venv venv #創(chuàng)建指定的venv
. venv/bin/action #啟動虛擬環(huán)境
2. 創(chuàng)建配置文件
app/config.py
import os
basedir = os.path.abspath(os.path.dirname(__name__))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or '!@#$%^&*12345678'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
DEBUG_TB_INTERCEPT_REDIRECTS = False #這配置debug的工具欄不攔截302跳轉(zhuǎn)
class DevelopmentConfig(Config):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
配置一個默認(rèn)的谬以,開發(fā)的强饮,線上的。
3. 創(chuàng)建應(yīng)用工廠 app/__init__.py
from flask import Flask #導(dǎo)入flask
from app.config import Config #導(dǎo)入配置文件中的Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
return app
流水線導(dǎo)入所需要的插件为黎,之后在create_app
里面初始化init_app()
邮丰。 init_app()這個會把插件掛載到app應(yīng)用上
4. 創(chuàng)建命令 app/cli.py
def register(app):
@app.cli.command('add_account', short_help='添加賬號')
def add_account():
pass
在這里集中放命令,這里的方法會在run.py
的cli.regiter(app)
把create_app
創(chuàng)建的返回對象注入進(jìn)去铭乾,就可以flask add_account
就可以使用此命令了剪廉。
5. 創(chuàng)建運行入口 run.py
from app import create_app, cli
app = create_app()
cli.register(app)
@app.shell_context_processor
def make_shell_context():
return {
'app': app
}
flask shell
進(jìn)入shell環(huán)境,就可以使用 @app.shell_context_processor
壓入的dist,而不需要手動進(jìn)入 form app import app
現(xiàn)在我們可以試著運行下項目了炕檩,先安裝所需要的Flask斗蒋。
pip install flask
export FLASK_APP=run.py
export FLASK_ENV=development
? flask shell
Python 3.7.0 (default, Jul 23 2018, 20:22:55)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
App: app [development]
Instance: /Users/jydd/python/myweb/instance
>>> app
<Flask 'app'>
給項目加把鎖,用git版本控制
.gitignore
venv/
*.pyc
__pycache__/
instance/
到這里我們試試項目是否正撑跏椋可用吹泡。我們在工廠函數(shù)那加一個視圖測試看看 app/__init__.py
from flask import Flask #導(dǎo)入flask
from app.config import Config #導(dǎo)入配置文件中的Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
@app.route('/')
def index():
return 'index'
return app
訪問http://127.0.0.1:5000 正常情況下會顯示 index這就說明基本框架已起正常運行了