Flask – лёгкий веб-фреймворк

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Flask

Flask — это минималистичный веб-фреймворк на Python, предназначенный для создания веб-приложений и REST API. Он предоставляет простую и гибкую структуру, позволяющую быстро разработать как прототип, так и полнофункциональное веб-приложение. Flask основан на WSGI и Werkzeug, а также использует систему шаблонов Jinja2.


Основные особенности Flask

  • Минималистичный и расширяемый

  • Встроенная маршрутизация и обработка запросов

  • Поддержка шаблонов Jinja2

  • Возможность создания REST API

  • Поддержка расширений (ORM, авторизация, формы)

  • Совместимость с Python 3.7+


Установка и настройка

Установка через pip:

bash
pip install flask

Проверка установки:

bash
python -m flask --version

Создание файла app.py и запуск:

bash
export FLASK_APP=app.py flask run

Создание первого приложения

Простой пример app.py:

python
from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Добро пожаловать во Flask!"

Запуск:

bash
flask run

Приложение будет доступно по адресу http://localhost:5000/


Обработка маршрутов и URL

python
@app.route("/user/<username>") def show_user_profile(username): return f"Профиль пользователя: {username}"

Маршруты могут содержать переменные и типизацию:

python
@app.route("/post/<int:post_id>") def show_post(post_id): return f"Пост №{post_id}"

Работа с шаблонами Jinja2

Создайте папку templates и файл index.html:

html
<!-- templates/index.html --> <h1>Привет, {{ name }}!</h1>

В app.py:

python
from flask import render_template @app.route("/hello/<name>") def hello(name): return render_template("index.html", name=name)

Обработка форм и методов POST/GET

python
from flask import request @app.route("/form", methods=["GET", "POST"]) def form(): if request.method == "POST": username = request.form["username"] return f"Привет, {username}" return ''' <form method="post"> <input name="username"> <input type="submit"> </form> '''

Работа с базами данных

С Flask можно использовать SQLAlchemy:

bash
pip install flask_sqlalchemy
python
from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100))

Создание REST API с Flask

python
from flask import jsonify @app.route("/api/data") def api_data(): data = {"name": "Flask", "version": "2.x"} return jsonify(data)

Для более продвинутого API можно использовать Flask-RESTful или Flask-RESTX.


Работа с сессиями и куки

python
from flask import session app.secret_key = 'secret_key' @app.route("/login", methods=["POST"]) def login(): session["username"] = request.form["username"] return "Вы вошли как " + session["username"]

Обработка ошибок и логирование

python
@app.errorhandler(404) def page_not_found(error): return "Страница не найдена", 404

Логирование:

python
import logging logging.basicConfig(level=logging.INFO)

Подключение расширений Flask

Некоторые популярные расширения:

  • Flask-WTF — формы и CSRF

  • Flask-Login — авторизация

  • Flask-Migrate — миграции БД

  • Flask-Mail — отправка писем

Установка:

bash
pip install flask-wtf

Организация структуры крупного проекта

bash
project/ │ ├── app/ │ ├── __init__.py │ ├── routes.py │ └── models.py ├── templates/ ├── static/ └── run.py

Используется создание пакета Flask через Flask(__name__) и инициализация внутри __init__.py.


Тестирование Flask-приложений

python
def test_home(client): response = client.get("/") assert b"Добро пожаловать" in response.data

Используется встроенный тестовый клиент Flask и фреймворк pytest.


Развёртывание Flask-приложений

Способы развёртывания:

  • Gunicorn + Nginx

  • Docker-контейнер

  • Heroku

  • Railway.app

  • AWS Lambda (через Zappa)

Пример запуска с Gunicorn:

bash
gunicorn -w 4 -b 127.0.0.1:8000 app:app

Примеры практического применения Flask

  • Создание API для мобильных приложений

  • Панели администратора и CRM-системы

  • Бэкенды чат-ботов и Telegram-ботов

  • Мониторинг и аналитика в реальном времени

  • Прототипирование ML/AI моделей через Flask + REST


Часто задаваемые вопросы

Что такое Flask?

Это легковесный веб-фреймворк на Python для создания серверной логики и API.

Поддерживает ли Flask базы данных?

Да, через SQLAlchemy, SQLite, PostgreSQL и другие.

Flask — это асинхронный фреймворк?

Flask поддерживает асинхронные функции начиная с версии 2.x, но не является полностью асинхронным фреймворком.

Можно ли использовать Flask для крупных проектов?

Да, с правильной архитектурой и использованием blueprints.

Чем Flask отличается от Django?

Flask — микрофреймворк с минимальной структурой, Django — полнофункциональный фреймворк с множеством встроенных компонентов.

Полный справочник по ключевым функциям и модулям библиотеки Flask для Python

Основы создания приложения

Компонент Описание
Flask(__name__) Создает экземпляр Flask-приложения.
app.run(debug=True) Запускает встроенный веб-сервер.
@app.route('/path') Декоратор для связывания URL с функцией-обработчиком.
@app.route(..., methods=['GET', 'POST']) Указывает разрешённые HTTP-методы.

Обработка запросов

Объект / Функция Описание
request.method HTTP-метод запроса (GET, POST и т.д.).
request.args Параметры из строки запроса (?param=value).
request.form Данные из формы (POST).
request.json Данные в формате JSON.
request.files Загрузка файлов через формы.
redirect(url) Перенаправление на другой адрес.
url_for('func') Получает URL по имени функции.

Ответы и шаблоны

Функция Описание
render_template('file.html', **kwargs) Отрисовывает HTML-шаблон с параметрами.
make_response(data, status) Создает объект ответа вручную.
abort(404) Прерывает выполнение и возвращает ошибку.
jsonify(obj) Возвращает JSON-ответ.

Шаблонизация с Jinja2

Синтаксис Описание
{{ variable }} Вставка значения переменной.
{% for item in list %} Цикл в шаблоне.
{% if condition %} Условный блок.
{# комментарий #} Комментарий в шаблоне.
{% include 'partial.html' %} Вставка шаблона.
{% extends 'base.html' %} Наследование шаблона.
{% block content %} Определение блока для переопределения.

Работа с куки и сессиями

Объект / Метод Описание
request.cookies.get('key') Получение значения куки.
response.set_cookie('key', 'value') Установка значения куки.
session['key'] = value Сохранение значения в сессии.
session.get('key') Чтение значения из сессии.

Управление ошибками

Функция / Декоратор Описание
@app.errorhandler(404) Обработка ошибки 404.
abort(403) Явное возбуждение HTTP-ошибки.

Blueprint (структуризация приложения)

Компонент Описание
Blueprint('name', __name__) Создает модуль приложения.
app.register_blueprint(bp) Регистрирует Blueprint в основном приложении.
@bp.route() Используется как @app.route() внутри Blueprint.

CLI и управление приложением

Команда / Метод Описание
flask run Запуск приложения (если установлен FLASK_APP).
FLASK_ENV=development Включает отладочный режим.
app.cli.command() Создание своей CLI-команды.

Расширения Flask

Расширение Назначение
Flask-SQLAlchemy Интеграция с базами данных.
Flask-Migrate Управление миграциями БД.
Flask-WTF Работа с формами (на базе WTForms).
Flask-Login Аутентификация пользователей.
Flask-Mail Отправка почты.
Flask-RESTful Быстрое создание REST API.
Flask-CORS Обработка CORS-запросов.

Пример базового приложения

python
from flask import Flask, request, render_template app = Flask(__name__) @app.route('/') def home(): return 'Привет, Flask!' @app.route('/hello/<name>') def hello(name): return render_template('hello.html', name=name) if __name__ == '__main__': app.run(debug=True)

Заключение: роль Flask в современном веб-развитии

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