Ошибка при создании структуры приложения на 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 шт):
Всегда пользуюсь такой структурой и не жалуюсь:
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 <- Исполняемый файл
Так меня научили делать в Яндексе. Всё структурированно и находится в своих директориях, что ускоряет работу в разы.