Веб-приложение Flask
В этой главе вы с нуля с помощью Flask создадите своё первое веб-приложение и поймёте философию проектирования микрофреймворков.
Различия в позиционировании Flask и Django
Django — это «всё в одном», полностековый фреймворк со встроенными ORM, шаблонизатором, административным бэкендом, аутентификацией пользователей, обработкой форм и многим другим.
Flask — это микрофреймворк— ядро минимально, обеспечивает только маршрутизацию и рендеринг шаблонов; другие возможности добавляются по мере необходимости через расширения.
| Особенности | Django | Flask |
|---|---|---|
| Философия дизайна | Из коробки (батарейки в комплекте) | Микрофреймворк, расширяется по мере необходимости |
| ORM | Встроенная Django ORM | Flask-SQLAlchemy (расширение) |
| Миграции базы данных | Встроенные makemigrations/migrate | Flask-Migrate (расширение) |
| Аутентификация пользователей | Встроенный модуль аутентификации | Flask-Login (расширение) |
| Панель администратора | Встроенный Django Admin | Flask-Admin (расширение) |
| Шаблонизатор | Шаблоны Django | Jinja2 (синтаксис почти идентичен) |
| Конфигурация маршрутов | Централизованная конфигурация в urls.py | Объявляйте декораторы локально |
Рекомендация: новичкам, которые хотят быстро получить результат, стоит использовать Django; тем, кто предпочитает полный контроль и сборку по требованию — Flask.
Подготовка окружения
Проверьте версию Python (требуется 3.8 или выше):
$ python3 --version Python 3.12.0
Создайте виртуальное окружение и установите Flask
$ python3 -m venv venv $ source venv/bin/activate # Windows:venv\Scripts\activate (venv) $ pip install flask
Проверьте установку:
(venv) $ python -c "import flask; print(flask.__version__)" 3.1.0
Минимальное приложение Flask
Приложению Flask достаточно одного файла Python.
Пример
from flask import Flask
# Создать экземпляр приложения Flask
# __name__ сообщает Flask расположение текущего модуля (используется для поиска шаблонов и статических файлов)
app = Flask(__name__)
# @app.route("/") — декоратор маршрута: выполняет следующую функцию при обращении к пути /
@app.route("/")
def index():
return '<h1>Добро пожаловать в EXAMPLE Blog</h1>'
# Если вы запускаете python app.py напрямую (вместо flask run), запустите сервер разработки
if __name__ == '__main__':
app.run(debug=True)
Запустите сервер разработки
(venv) $ flask run * Running on http://127.0.0.1:5000
Откройте http://127.0.0.1:5000/ в браузере и посмотрите содержимое страницы.
Включите горячую перезагрузку (автоматический перезапуск сервера после изменений кода):
(venv) $ flask run --debug
flask runПоиск по умолчаниюapp.pyinappЭкземпляр. Если имя файла или имя экземпляра отличается, необходимо задать переменные окружения:FLASK_APP=myapp.py(имя файла),FLASK_APP=myapp:create_app()(фабричная функция).
Инструмент командной строки Flask
exceptflask run, Flask также предоставляет другие полезные команды.
| Команда | Функция |
|---|---|
| flask run | Запустите сервер разработки |
| flask run --debug | Запуск сервера + горячая перезагрузка + режим отладки |
| flask routes | Показать все зарегистрированные маршруты |
| flask shell | Войти в интерактивную оболочку (автоматически импортирует экземпляр приложения) |
Планирование структуры каталогов проекта
Хотя Flask поддерживает приложения из одного файла, реальным проектам нужна четкая организация каталогов.
blog_project/ ├── app/ │ ├── __init__.py # 应用工厂 create_app()(第十章引入) │ ├── blueprints/ # 路由 Blueprint(第四章分离) │ ├── templates/ # Jinja2 模板(第二章创建) │ ├── static/ # 静态文件 CSS/JS/图片 │ ├── models.py # SQLAlchemy 模型(第三章创建) │ └── forms.py # Flask-WTF 表单(第八章创建) ├── config.py # 配置文件 ├── app.py # 应用入口(第一章从这里开始) └── .env # 环境变量
Практика: маршрут главной страницы блога
Создайте каркас проекта, настройте маршрут главной страницы и сделайте так, чтобы браузер отображал приветственное сообщение.
Пример
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
"""Главная страница блога"""
return """
<h1>Добро пожаловать в блог EXAMPLE</h1>
<p>Это сайт-витрина личного блога, созданный с помощью Flask.</p>
<p>Скоро появится больше контента, следите за обновлениями.</p>
"""
@app.route("/about")
def about():
"""Страница «О сайте»"""
return '<h1>Об этом сайте</h1><p>Заметки по изучению фронтенда и бэкенда.</p>'
Запустите:
flask run
Посетите главную страницу и страницу «О сайте», чтобы убедиться, что маршруты работают правильно.
Итоги главы
В этой главе вы сделали три вещи: создали виртуальное окружение и установили Flask, поняли разницу в позиционировании между Flask как микрофреймворком и Django как фреймворком «всё в одном», а также написали свою первую страницу маршрута.
Главный вывод: минимальному приложению Flask требуется толькоFlask(__name__) + @app.route()Декоратор, используяflask runЗапуск.