最基础的目录
初始化的目录结构:
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)