Структура проекта Flask
Приложение Flask может состоять всего из одного файла.
Например, следующий файл hello.py является приложением Flask:
Пример
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
Однако, когда проект становится больше, нереалистично поместить весь код в один файл.
Структура проекта Flask может варьироваться в зависимости от размера и сложности приложения.
Ниже приведены несколько распространённых структур проектов Flask, подходящих соответственно для простых и более сложных приложений.
- Простая структура проекта: Подходит для небольших приложений, весь код сосредоточен в одном файле.
- Структура проекта среднего размера: Разделяет приложение на несколько модулей для упрощения управления и расширения.
- Сложная структура проекта: Поддерживает высокую модульность, подходит для больших приложений, включая маршруты, модели, шаблоны и каталоги статических файлов.
1. Простая структура проекта
Для простого приложения Flask структура проекта может быть очень лаконичной:
my_flask_app/ │ ├── app.py └── requirements.txt
app.py: Основной файл приложения Flask, содержащий определения маршрутов и функций представлений.requirements.txt: Перечисляет зависимости проекта, используется для записи информации о версиях Flask и других пакетов.
Код файла app.py в каталоге my_flask_app:
Пример
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
Пример requirements.txt:
Flask==2.2.3
2. Структура проекта среднего размера
Для немного более сложных приложений проект обычно разделяется на несколько модулей и каталогов:
my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes.py │ └── models.py │ ├── config.py ├── requirements.txt └── run.py
app/: Содержит основной код приложения Flask.__init__.py: Инициализирует приложение Flask и настраивает расширения.routes.py: Определяет маршруты и функции представлений приложения.models.py: Определяет модели данных приложения.
config.py: Файл конфигурации, содержащий информацию о конфигурации приложения.requirements.txt: Перечислите библиотеки зависимостей проекта.run.py: Используется для запуска приложения Flask.
app/__init__.py пример:
Пример
def create_app():
app = Flask(__name__)
app.config.from_object('config.Config')
from . import routes
app.register_blueprint(routes.bp)
return app
app/routes.py пример:
Пример
bp = Blueprint('main', __name__)
@bp.route('/')
def home():
return 'Hello, World!'
run.py пример:
Пример
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
3. Сложная структура проекта
Для более крупных приложений может потребоваться более сложная структура проекта для поддержки более высокой модульности и расширяемости:
my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes/ │ │ ├── __init__.py │ │ ├── main.py │ │ └── auth.py │ ├── models/ │ │ ├── __init__.py │ │ └── user.py │ ├── templates/ │ │ ├── layout.html │ │ └── home.html │ └── static/ │ ├── css/ │ └── js/ │ ├── config.py ├── requirements.txt ├── migrations/ │ └── ... └── run.py
app/routes/: Управляет маршрутами для разных функциональных модулей отдельно.main.py: Маршруты для основного модуля.auth.py: Маршруты, связанные с аутентификацией.
app/models/: Управление моделями данных, обычно связанными с операциями с базой данных.user.py: Модель пользователя.
app/templates/: Хранение файлов HTML-шаблонов.app/static/:Хранение статических файлов, таких как CSS и JavaScript.migrations/: Файлы миграции базы данных, обычно связанные с SQLAlchemy.
app/routes/main.py пример:
Пример
bp = Blueprint('main', __name__)
@bp.route('/')
def home():
return render_template('home.html')
app/models/user.py пример:
Пример
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)