Ошибка при создании структуры приложения на Flask

Пытаюсь сделать правильную структуру для небольшого приложения на Flask. Сейчас проект имеет следующую структуру:

name_project
    |------app/
    |         |------ __init__.py
    |         |------ views.py
    |         |------ models.py
    |         |------ constants.py
    |         |------ db_filler.py
    |         |------ templates/
    |                    |-----index.html
    |                    |-----documents.html
    |         |------ static/
    |                     |-----css/
    |                            |--- styles.css
    |                     |-----js/
    |                            |--- script.js
    |--- run.py

run.py:

from app import app

if __name__ == "__main__":
    app.run()

__init__.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.secret_key = 'key'

db = SQLAlchemy(app)

from app import models
from app import views

models.py:

from app import db

class Document(db.Model):
    id = db.Column(db.String(255), primary_key=True)
    req_detail = db.Column(db.Text, nullable=False)
    cond_detail = db.Column(db.Text, nullable=False)
    instance = db.Column(db.Integer, nullable=False)

views.py:

from app import app
from flask import render_template, request
from constants import SolutionType
from app.models import Solution, Category, Condition, Requirement, Deal


@app.route('/')
def index():
    return {'satisfied_percent': get_percent(SolutionType.SATISFIED.value),
            'partially_satisfied_percent': get_percent(SolutionType.PARTIALLY_SATISFIED.value),
            'denied_percent': get_percent(SolutionType.DENIED.value)
            }

constants.py:

from enum import Enum


class SolutionType(Enum):
    SATISFIED = 'str1'
    PARTIALLY_SATISFIED = 'str2'
    DENIED = 'str3'

Для экономии места некоторые классы таблиц в models.py убраны, также как и ф-ии в views.py. Проблема в том, что при запуске приложения, появляется ошибка:

* Serving Flask app 'run.py' (lazy loading)
* Environment: development
* Debug mode: off
Usage: python -m flask run [OPTIONS]
Try 'python -m flask run --help' for help.

Error: While importing 'run', an ImportError was raised.
                       

Если из __init__.py убрать views.py, то проект запустится. Если поменять импорты models и views местами, то ошибка всё равно сохранится. Пожалуйста, подскажите, как быть, уже все варианты импортов перепробовал. Как я понял, проблема во views.py, т.к. без него проект запускается.


Ответы (1 шт):

Автор решения: Evil Giraffe

Всегда пользуюсь такой структурой и не жалуюсь:

name_project
    |------data/
    |         |------ __all_models.py <- Описываю модели для db через sqlalchemy
    |         |------ db_session.py <- Сессия для взаимодействия с db
    |         |------ forms.py <- Формы для html страницы на flask_wtf
    |------db/
    |         |------ database.db <- Датабаза
    |------pages/
    |         |------ home.py <- Пример страницы на питоне, которые я соединяю через blueprint
    |         |------ ect...
    |------static/
    |         |------ img/ <- Папка с изображениями
    |         |------ scripts.js <- js файл
    |         |------ style.css <- css файл
    |------templates/
    |         |------ home.html <- Пример хранимой страницы в html формате
    |         |------ ect...
    |--- main.py <- Исполняемый файл

Так меня научили делать в Яндексе. Всё структурированно и находится в своих директориях, что ускоряет работу в разы.

→ Ссылка