Сомнения в организации Flask проекта - PullRequest
0 голосов
/ 28 апреля 2020

В последнее время я начал беспокоиться о том, чтобы мои 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.

...