В последнее время я начал беспокоиться о том, чтобы мои Flask проекты были более организованными, и начал искать способы, которыми люди обычно их организовывают. Я знаю, что это очень субъективный вопрос, но я хотел бы иметь макет, на который, кроме меня, людям удобно смотреть.
Так что я нашел эту книгу, которая привлекла мое внимание: https://exploreflask.com/en/latest/preface.html
Целевая структура, проиллюстрированная ею, и то, что я хочу для своего проекта, выглядит примерно так (уже применено к моему сценарию использования):
config/
default.py
development.py
production.py
instance/
config.py
app/
__init__.py
camera/
__init__.py
views.py
inspection/
__init__.py
views.py
models.py
swagger/
swagger.yaml
requirements.txt
run.py
start.sh
.gitignore
В основном мое приложение состоит только из конечных точек без сохранения файлов * stati c (css или html). Просто API.
Все стало путаться, когда я понял, что модуль camera
будет иметь функции, которые будет использовать модуль inspection
. Как я могу организовать так, чтобы оба модуля могли использовать эти функции? Эти функции тесно связаны с camera
(то есть с доступом к камере). Я должен написать эти функции на camera/views.py
или на отдельном модуле? Какие варианты могут привести к лучшей организации?
Еще одна вещь, которую я очень смущен, - это run.py
. В учебнике говорится, что run.py
будет использоваться только по причинам разработки Хорошо, но тогда где мне создать экземпляр моего Flask приложения?
Они предоставили этот код, который создает приложение Flask и загрузку конфигураций, но они подразумевают ( здесь ), что это код должен быть на app/__init__.py
:
## on app/__init__.py
from flask import Flask
from .camera import camera
app = Flask(__name__)
# Load the default configuration
app.config.from_object('config.default')
# Load the configuration from the instance folder
app.config.from_pyfile('config.py')
# Load the file specified by the APP_CONFIG_FILE environment variable
# Variables defined here will override those in the default configuration
app.config.from_envvar('APP_CONFIG_FILE')
app.register_blueprint(camera)
## on ./run.py
from app import app
if __name__ == '__main__':
argParser = ArgumentParser()
argParser.add_argument('--fps', dest="fps", type=str, default='8')
argParser.add_argument('--port', dest="port", type=str, default='8080')
args = argParser.parse_args()
app.run(host='0.0.0.0', port=args.port, debug=app.config['DEBUG'])
Но когда я пытаюсь запустить его, он возвращает ошибку:
FileNotFoundError: [Errno 2] Unable to load configuration file (No such file or directory): '/Users/xxxxx/myproject/app/config.py'
Понятно, поскольку папка конфигурации одна папка над файлом app/__init__.py
. Я что-то упускаю в объяснении?
Кроме того, где и как мне запустить сервер? На run.py
или app/__init__.py
?? Пожалуйста, учтите, что в будущем я собираюсь использовать gunicorn для WSGI.