Flask 包结构,我应该在哪里正确放置我的 API 文件?

Flask package structure, where do I properly place my API files?

这是我当前的设置并且可以正常工作,但这会增加初始化文件的体积。我应该如何构建它以便我的 API 位于它自己的文件夹中并正确运行?当我将 testapi.py 放在与 run.py 相同的级别时,我无法导入任何模型。

├── my_frame
│   ├── __init__.py
│   ├── forms.py
│   ├── models.py
│   ├── routes.py
│   ├── site.db
│   ├── static
│   ├── templates
│   └── testapi.py
├── run.py
└── venv

init.py

import os
from flask import Flask
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail

#app config, db, encryption, loginmanager
app = Flask(__name__)
app.config['SECRET_KEY'] =
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)

#app API
api = Api(app)
class HelloWorld(Resource):
    def get(self):
        return {"data": "Hello World"}

api.add_resource(HelloWorld,"/helloworld")

我推荐这个结构(基于Flasky application - Miguel Grinberg的结构):

├── app
│   ├── __init__.py
│   ├── models.py
│   ├── site.db
│   ├── static
│   ├── templates
│   ├── api
│   │   ├── __init__.py
│   │   └── hello_worlds.py
│   └── main
│       ├── __init__.py
│       ├── forms.py
│       └── routes.py (a.k.a. views.py)
├── tests
│   └── test_api.py
├── run.py
└── venv

api/hello_worlds.py

from flask_restful import Resource


class HelloWorld(Resource):
    def get(self):
        return {"data": "Hello World"}

api/__init__.py

from flask import Blueprint
from flask_restful import Api

from app.api.hello_worlds import HelloWorld


# Initialize the API component.
api_blueprint = Blueprint("api", __name__)
_api = Api(api_blueprint)

# Register the resources of the API to it.
_api.add_resource(HelloWorld, "/helloworld")

app/__init__.py

import os

from flask import Flask
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail


app = Flask(__name__)
app.config['SECRET_KEY'] =
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)

from app.api import api_blueprint
app.register_blueprint(api_blueprint, url_prefix="/api/v1")

from app.main import main_blueprint
app.register_blueprint(main_blueprint)

要访问您的资源,请向 http://localhost:5000/api/v1/helloworld 发出请求(例如)。