Веб-приложение Flask

В этой главе вы с нуля с помощью Flask создадите своё первое веб-приложение и поймёте философию проектирования микрофреймворков.


Различия в позиционировании Flask и Django

Django — это «всё в одном», полностековый фреймворк со встроенными ORM, шаблонизатором, административным бэкендом, аутентификацией пользователей, обработкой форм и многим другим.

Flask — это микрофреймворк— ядро минимально, обеспечивает только маршрутизацию и рендеринг шаблонов; другие возможности добавляются по мере необходимости через расширения.

ОсобенностиDjangoFlask
Философия дизайнаИз коробки (батарейки в комплекте)Микрофреймворк, расширяется по мере необходимости
ORMВстроенная Django ORMFlask-SQLAlchemy (расширение)
Миграции базы данныхВстроенные makemigrations/migrateFlask-Migrate (расширение)
Аутентификация пользователейВстроенный модуль аутентификацииFlask-Login (расширение)
Панель администратораВстроенный Django AdminFlask-Admin (расширение)
ШаблонизаторШаблоны DjangoJinja2 (синтаксис почти идентичен)
Конфигурация маршрутовЦентрализованная конфигурация в 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.

Пример

# Путь к файлу: app.py
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                     # 环境变量

Практика: маршрут главной страницы блога

Создайте каркас проекта, настройте маршрут главной страницы и сделайте так, чтобы браузер отображал приветственное сообщение.

Пример

# Путь к файлу: app.py
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Запуск.

Другие расширения