最基礎的目錄
初始化的目錄結構:
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)