Flask後端編寫應用時的基本目錄結構

最基礎的目錄

初始化的目錄結構:

 

ginger 是入口腳本保持和項目名稱一致:


from app.app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

app 目錄是存放着創建 flask 應用的方法

from flask import Flask


def create_app():
    app = Flask(__name__)
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    return app

在app目錄下有config目錄裏面存放着兩種配置文件。(數據庫連接信息和業務的配置信息)

 

 

藍圖功能的初始化目錄結構

 1、藍圖是模塊級別的拆分,不是視圖級別的拆分。

 2、視圖函數的路由重複度比較高,只有後綴不一樣。

這樣的使用方式是不正確的。

以下是正確的的拆分方式:

 

 

編寫流程如下:

 

1、創建紅圖類,承上啓下。和藍圖進行承上,與視圖函數層進行啓下。

 在app 目錄下創建libs目錄,創建redprint類別:



class Redprint:
    def __init__(self, name):
        # name 是指視圖類
        self.name = name
        # mound 是綁定路由方法 有多個
        self.mound = []

    # 重寫路由 定義裝飾器
    def route(self, rule, **options):
        def decorator(f):
            self.mound.append((f, rule, options))
            return f
        return decorator

    # 進行註冊,傳入藍圖和默認前綴
    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = '/'+ self.name
        for f, rule, options in self.mound:
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix+rule, endpoint, f, **options)


在藍圖中進行註冊紅圖,首先先創建藍圖、再進行註冊(承上)

 在 app

           --api

                   --v1

                        -- __init__.py

下創建藍圖,並將紅圖註冊到該藍圖中。


from flask import Blueprint
from app.api.v1 import user, book


def create_blueprint_v1():
    # 初始化創建一個藍圖 在 V1 目錄下
    bp_v1 = Blueprint('v1', __name__)
    # 將紅圖註冊到藍圖當中
    user.api.register(bp_v1)
    book.api.register(bp_v1)
    return bp_v1

在紅通中,將實體類別的類進行註冊,創建實體類別,初始化紅圖,註冊紅圖三步走(啓下)

在 app

          --api

                 --v1

下創建 book.py 和 user.py 作爲視圖函數。

user.py

#user.py


from app.libs.redprint import Redprint

# 初始化紅圖
api = Redprint('user')


@api.route('/get')
def get_user2():
    return "I am user get method"


@api.route('/create')
def get_create_user():
    return "create user method"

book.py

from app.libs.redprint import Redprint

# 初始化紅圖
api = Redprint('book')


@api.route('/get')
def get_user():
    return "I am book get method"


@api.route('/create')
def get_book():
    return "create book method"

在app 目錄下要有一個 app 的創建方法,以及創建app和藍圖的註冊關係

app.py

from flask import Flask


def register_blueprints(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')


def create_app():
    app = Flask(__name__)
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    # 將藍圖註冊到app 上
    register_blueprints(app)
    return app

在工程的主文件存在一個入口腳本 與工程名相同 ginger.py


from app.app import create_app

app = create_app()
#print(app)

if __name__ == '__main__':
    app.run(debug=True)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章