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
发出请求(例如)。
这是我当前的设置并且可以正常工作,但这会增加初始化文件的体积。我应该如何构建它以便我的 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
发出请求(例如)。