Flask實戰腳手架-專案建立

germo發表於2021-09-09

暫定功能模組:

  • 使用者模組

  • 文章模組

用到的python外掛:

  • Flask-Login #使用者登陸

  • Flask-Migrate #資料庫管理工具

  • Flask-DebugToolbar #dubug工具欄

  • Flask-SQLAlchemy #ORM

  • Flask-WTF #表單


專案目錄結構

myweb
│
└───app #此為應用主目錄│   │   
│   └───backend #應用分組模組,這樣區分的好處是結構化│   │   │   __init__.py
│   │   │   forms.py #表單集合│   │   │   views.py #路由│   │ 
│   └───static #靜態的檔案,如jpg、css、js│   │   │   ...
│   │ 
│   └───templates #模板檔案│   │   └───backend #對應app/backend模板目錄│   │   └───layout #模板佈局目錄│   │   
│   │   __init__.py
│   │   cli.py #這裡集中管理註冊的命令│   │   config.py #這裡集中管理配置的檔案│   │   models.py #這裡集中管理資料模型│   
│   run.py #單獨剝離出來的執行檔案,檔案除錯,比如```cli、flask shell```│
└───venv #python3 -m venv venv虛擬環境

專案的結構化的整理主要是為了合理的管理專案,但都是自由化的,比如 app/models.py 他是管理資料模型的裡面有 User、News...等,但是當表模型很多的情況下完全可以升級他,比如刪除models.py接著新建一個models資料夾,在裡面建立User.py、News.py... 一切的一切只是為了更好的管理專案。

1. 搭建虛擬環境

建立一個目錄myweb,並進入目錄,建立python3的虛擬環境

mkdir myweb && cd myweb
python3 -m venv venv #建立指定的venv. venv/bin/action #啟動虛擬環境

2. 建立配置檔案

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跳轉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')

配置一個預設的,開發的,線上的。

3. 建立應用工廠 app/__init__.py

from flask import Flask #匯入flaskfrom app.config import Config #匯入配置檔案中的Configdef create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)    return app

流水線匯入所需要的外掛,之後在create_app裡面初始化init_app()。 init_app()這個會把外掛掛載到app應用上

4. 建立命令 app/cli.py

def register(app):
    @app.cli.command('add_account', short_help='新增賬號')    def add_account():
        pass

在這裡集中放命令,這裡的方法會在run.pycli.regiter(app)create_app建立的返回物件注入進去,就可以flask add_account就可以使用此命令了。

5. 建立執行入口 run.py

from app import create_app, cli

app = create_app()
cli.register(app)@app.shell_context_processordef make_shell_context():
    return {        'app': app
    }

flask shell 進入shell環境,就可以使用 @app.shell_context_processor 壓入的dist,而不需要手動進入 form app import app


現在我們可以試著執行下專案了,先安裝所需要的Flask。
pip install flask

export FLASK_APP=run.pyexport 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/

到這裡我們試試專案是否正常可用。我們在工廠函式那加一個檢視測試看看 app/__init__.py

from flask import Flask #匯入flaskfrom app.config import Config #匯入配置檔案中的Configdef create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)    @app.route('/')
    def index():
        return 'index'

    return app

訪問  正常情況下會顯示 index這就說明基本框架已起正常執行了



作者:七霸刀
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2819213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章