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)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值