Хочешь написать своё первое веб-приложение на Python — без нагромождения конфигов и обязательного изучения десяток концепций заранее? Flask — твой старт. Пять строк кода, и сервер уже крутится на твоей машине. Именно так Python Flask для начинающих покоряет разработчиков с 2010 года: не ограничивает, не навязывает архитектуру, растёт вместе с задачами — от учебного проекта до продакшн-API. В этом руководстве пройдём полный путь: от установки до деплоя, с рабочими примерами кода и практиками 2026 года.
За 2 месяца вы научитесь делать слайды, которые останавливают внимание, а не усыпляют. Записаться →
Что такое Flask и зачем он нужен
Flask — микрофреймворк для создания веб-приложений на Python. «Микро» — не значит слабый. В ядре фреймворка только необходимое: маршрутизация, WSGI-сервер через Werkzeug и шаблонизатор Jinja2. Всё остальное подключаешь сам — ровно столько, сколько нужно проекту.
Актуальная версия — Flask 3.1.3 (февраль 2026). Flask работает в продакшн у крупных компаний и лежит в основе сотен тысяч API-сервисов по всему миру.
Почему выбирают Flask:
- Минималистичность — базовое приложение умещается в 5 строк
- Гибкость — подключаешь только нужные библиотеки
- Низкий порог входа — проще Django для первого знакомства с вебом
- Огромная экосистема — сотни расширений на все случаи жизни
- Отлично подходит для RESTful API, микросервисов и прототипирования
- Не просто PowerPoint — вы освоите 4 инструмента: PowerPoint, Figma, Google Slides и Keynote. Узнать подробнее →
История и философия Flask
Армин Ронахер написал Flask в 2010 году как первоапрельскую шутку: взял Jinja2 и Werkzeug, склеил их вместе и сделал вид, что это фреймворк. Шутка оказалась удачнее многих серьёзных проектов. Принцип, который лежит в основе Flask: не делай за разработчика то, чего он не просил. Никакой ORM из коробки, никакой admin-панели, никакой обязательной структуры папок — полная свобода архитектурных решений.
Ваша следующая презентация может изменить карьеру. Готовьтесь к ней правильно. Начать →
Flask vs Django: что выбрать новичку
Flask — для старта и понимания основ, Django — когда нужен быстрый запуск продукта со стандартными решениями.
Ключевые отличия:
- Порог входа: Flask — низкий, Django — средний
- Гибкость архитектуры: Flask — максимальная, Django — ограничена конвенциями
- ORM: у Flask нет (Flask-SQLAlchemy отдельно), у Django встроена
- Admin-панель: у Flask нет, у Django есть
- Где Flask лучше: API, микросервисы, учёба; Django — для CMS и крупных монолитов
Хочешь понять, как вообще работает веб на Python — Flask даст это понимание быстрее.
Хотите, чтобы инвесторы поверили в ваш проект? Узнайте, как делать питч-презентации. Записаться →
Установка и настройка рабочего окружения
Настройка среды занимает 5–7 минут и делается один раз.
Хорошая презентация начинается со структуры, а не с дизайна. Узнайте правильный порядок. Начать →
Установка Python 3 и pip
Flask требует Python 3.8+. В 2026 году стоит взять Python 3.10 или 3.12 — они получают обновления безопасности и прирост производительности.
Проверь, установлен ли Python:
bashpython --version
<h2>или</h2>
python3 --version
Если вывод показывает Python 3.10.x и выше — отлично. Иначе скачай установщик с python.org. На Windows поставь галочку «Add Python to PATH» — без неё придётся прописывать пути вручную.
Обнови pip:
bashpython -m pip install --upgrade pip
Ваш конкурент уже умеет делать убедительные презентации — вы ещё нет? Исправить это →
Создание виртуального окружения (venv)
Виртуальное окружение — изолированная папка с пакетами только для одного проекта. Благодаря venv зависимости разных проектов не конфликтуют. Это не опция — это обязательная практика.
bashmkdir my_flask_app
cd my_flask_app
python -m venv venv
Активация:
bash# Windows PowerShell
venv\Scripts\Activate.ps1<h2>Linux / macOS</h2>
source venv/bin/activate
После активации терминал покажет префикс (venv).
Коммерческое предложение, которое закрывает сделки — отдельный блок курса для бизнеса. Узнать подробнее →
Установка Flask и проверка версии
bashpip install flask
pip подтянет все зависимости: Werkzeug, Jinja2, Click, itsdangerous. Проверка:
bashflask --version
<h2>Python 3.12.x</h2>
<h2>Flask 3.1.3</h2>
Для предпринимателей: научитесь создавать коммерческие предложения, которые закрывают сделки. Выбрать тариф →
Первое Flask-приложение: Hello World
Таймер идёт: запись закрывается, когда закончатся свободные места. Их осталось 4. Занять место →
Структура проекта и файл app.py
Создай в папке проекта файл app.py. Типовая структура:
textmy_flask_app/
├── venv/
├── app.py
├── templates/
│ └── index.html
└── static/
└── style.css
- app.py — главный файл приложения
- templates/ — HTML-шаблоны (Jinja2 ищет их здесь)
- static/ — CSS, JS, изображения
- Визуализация данных, инфографика, работа с Figma — всё это входит в программу курса. Изучить программу →
Маршруты и декораторы @app.route
pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')
def index():
return '<h1>Привет, мир!</h1>'@app.route('/about')
def about():
return '<h2>О нас</h2>'if __name__ == '__main__':
app.run(debug=True)
Что происходит в коде:
- Flask(__name__) — создаёт экземпляр приложения; __name__ помогает Flask найти папку проекта
- @app.route('/') — декоратор маршрута: при запросе на / вызовется функция index()
- Функция представления (view function) — обычная Python-функция, которая возвращает ответ
- app.run(debug=True) — запускает встроенный сервер разработки
Маршруты принимают параметры из URL:
python@app.route('/user/<username>')
def user_profile(username):
return f'<h1>Профиль: {username}</h1>'@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Пост №{post_id}'
Первый бесплатный доступ на 3 дня — без привязки карты. Просто попробуйте. Попробовать бесплатно →
Запуск сервера и debug-режим
bash# Через CLI Flask — рекомендуется
flask --app app run --debug<h2>Или напрямую</h2>
python app.py
Открой браузер: http://127.0.0.1:5000/.
Debug-режим даёт два инструмента:
- Автоперезагрузка — сервер перезапускается при изменении кода
- Интерактивный дебаггер — трассировка ошибок прямо в браузере
⚠️ debug=True в продакшн — критическая уязвимость безопасности. Никогда не включай его на боевом сервере.
Попробуйте 3 дня бесплатно — если не понравится, вы ничего не теряете. Попробовать →
Шаблоны Jinja2 и работа с HTML
Строчить HTML прямо в Python-функциях — плохая практика для реальных проектов. Для разделения логики и представления Flask использует Jinja2.
Акция заканчивается. Успейте забрать курс со скидкой 50% до конца недели. Успеть →
Что такое Jinja2 и как он работает
Jinja2 — шаблонизатор, встроенный в Flask по умолчанию. Он позволяет писать HTML-файлы с динамическими вставками из Python. Синтаксис прост:
- {{ переменная }} — вывод значения: {{ user.name }}
- {% блок %} — управляющие конструкции: {% if user %} ... {% endif %}
- {# комментарий #} — комментарий, который не попадёт в HTML
Пример шаблона templates/index.html:
xml<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ heading }}</h1>
{% if user %}
<p>Привет, {{ user }}!</p>
{% else %}
<p>Войди в систему</p>
{% endif %}
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
ChatGPT, Midjourney, Dall-E — узнайте, как нейросети делают презентации в 5 раз быстрее. Начать сейчас →
Передача данных из Python в шаблон
render_template() рендерит шаблон и передаёт в него переменные:
pythonfrom flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():
return render_template(
'index.html',
title='Мой Flask-сайт',
heading='Добро пожаловать!',
user='Алексей',
items=['Python', 'Flask', 'Jinja2']
)
Переменные — строки, числа, списки, словари: Jinja2 работает с любыми Python-объектами.
Хотите зарабатывать на фрилансе? Курс учит искать заказчиков и оформлять договор. Начать →
Наследование шаблонов (base.html)
Наследование — главная суперспособность Jinja2. Создаём базовый шаблон templates/base.html:
xml<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{% block title %}Сайт{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<nav>
<a href="/">Главная</a> | <a href="/about">О нас</a>
</nav>
<main>{% block content %}{% endblock %}</main>
<footer>© 2026 My Flask App</footer>
</body>
</html>
Дочерняя страница наследует каркас через extends:
xml{% extends 'base.html' %}{% block title %}Главная{% endblock %}{% block content %}
<h1>Привет, {{ user }}!</h1>
{% endblock %}
Изменить навигацию или футер на всём сайте теперь можно в одном файле.
Получите полную программу курса в PDF — бесплатно, без регистрации. Скачать программу →
Формы и обработка данных пользователя
Хорошая презентация — это 25% успеха сделки. Плохая — 100% отказа. На каком вы уровне? Проверить себя →
Обработка GET и POST запросов
По умолчанию маршруты Flask принимают только GET. Чтобы обработать отправку формы, нужно явно указать POST:
pythonfrom flask import Flask, render_template, request, redirect, url_forapp = Flask(__name__)@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username == 'admin' and password == 'secret':
return redirect(url_for('dashboard'))
return render_template('login.html', error='Неверный логин или пароль')
return render_template('login.html')
Объект request хранит всё о входящем запросе:
- request.method — тип запроса: 'GET' или 'POST'
- request.form['field'] — данные из HTML-формы
- request.args['param'] — параметры из URL (?param=value)
- request.json — JSON-тело запроса (для API)
- Ближайший поток стартует скоро. Не ждите следующего — записывайтесь сейчас. Записаться →
Flask-WTF и валидация форм
Ручная проверка данных быстро становится громоздкой. Flask-WTF решает это лаконично:
bashpip install flask-wtf
pythonfrom flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, Emailclass LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Пароль', validators=[DataRequired(), Length(min=6)])
submit = SubmitField('Войти')
Flask-WTF автоматически подключает защиту от CSRF-атак — деталь безопасности, о которой новички часто забывают. Для работы нужен секретный ключ:
pythonapp.config['SECRET_KEY'] = 'твой-уникальный-ключ'
Flask-Login закрывает смежную задачу: управляет сессиями, даёт декоратор @login_required и объект current_user.
ChatGPT, Midjourney, Dall-E — узнайте, как нейросети делают презентации в 5 раз быстрее. Начать сейчас →
Работа с базой данных через Flask-SQLAlchemy
Хранить данные в памяти — только для экспериментов. В реальных проектах нужна база данных, и де-факто стандарт во Flask-экосистеме — Flask-SQLAlchemy.
Для предпринимателей: научитесь создавать коммерческие предложения, которые закрывают сделки. Выбрать тариф →
Подключение SQLite через Flask-SQLAlchemy
SQLite идеальна для разработки и небольших проектов: просто файл на диске, сервер не нужен.
bashpip install flask-sqlalchemy
pythonfrom flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)
106 уроков, 9 тренажёров и поддержка куратора целый год. Это не просто курс — это инвестиция. Выбрать тариф →
Создание моделей и работа с данными
Модель — Python-класс, который соответствует таблице в базе данных:
pythonclass User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
body = db.Column(db.Text, nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Создать таблицы:
pythonwith app.app_context():
db.create_all()
Основные CRUD-операции:
python# Create
new_user = User(username='alice', email='alice@example.com')
db.session.add(new_user)
db.session.commit()<h2>Read</h2>
all_users = User.query.all()
user = User.query.filter_by(username='alice').first()<h2>Update</h2>
user.email = 'new@example.com'
db.session.commit()<h2>Delete</h2>
db.session.delete(user)
db.session.commit()
Для миграций схемы без потери данных подключай Flask-Migrate:
bashpip install flask-migrate
flask db init
flask db migrate -m "initial"
flask db upgrade
Научитесь выступать уверенно и удерживать внимание аудитории — онлайн и офлайн. Начать →
Деплой Flask-приложения и основы REST API
Визуализация данных, инфографика, работа с Figma — всё это входит в программу курса. Изучить программу →
Публикация на хостинге
Встроенный сервер (flask run) не для продакшна — он однопоточный. На боевом сервере запускай через Gunicorn:
bashpip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app:app
-w 4 — четыре рабочих процесса. Где размещать Flask-приложения:
- VPS (Timeweb, Selectel, REG.RU) — полный контроль, Gunicorn + Nginx
- Render.com — бесплатный тариф, автодеплой из GitHub
- Railway — быстрый старт без настройки инфраструктуры
- Yandex Cloud / VK Cloud — для российских проектов
Минимальная конфигурация Nginx как reverse proxy:
textserver {
listen 80;
server_name myapp.ru;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Сколько раз вам говорили «непонятно» после презентации? После курса такого больше не будет. Записаться →
Основы Flask REST API
Flask — один из лучших инструментов для REST API. jsonify() превращает Python-словарь в корректный JSON-ответ:
pythonfrom flask import Flask, jsonify, requestapp = Flask(__name__)
todos = [{'id': 1, 'title': 'Изучить Flask', 'done': False}]@app.route('/api/todos', methods=['GET'])
def get_todos():
return jsonify(todos)@app.route('/api/todos', methods=['POST'])
def create_todo():
data = request.json
new_todo = {'id': len(todos) + 1, 'title': data['title'], 'done': False}
todos.append(new_todo)
return jsonify(new_todo), 201
Когда в app.py появляется больше 5–7 маршрутов, разбивай приложение на модули через Blueprint:
python# auth/routes.py
from flask import Blueprintauth_bp = Blueprint('auth', __name__, url_prefix='/auth')@auth_bp.route('/login')
def login():
...<h2>app.py</h2>
from auth.routes import auth_bp
app.register_blueprint(auth_bp)
Скоро повышение цен. Зафиксируйте текущую стоимость прямо сейчас. Записаться →
FAQ: часто задаваемые вопросы
1. Нужно ли знать Django перед изучением Flask?
Нет. Flask проще — он лучше подходит как первый веб-фреймворк на Python. После него Django освоишь значительно быстрее.
2. Чем Flask отличается от Django?
Flask — микрофреймворк без ORM и admin-панели из коробки. Django — «batteries included» со стандартными решениями. Flask гибче; Django быстрее стартует в типовых проектах.
3. Можно ли сделать полноценный продакшн-сайт на Flask?
Да. Flask отлично работает под Gunicorn с Nginx, подключается к PostgreSQL, Redis и Celery. Его минимализм — это фича, а не баг.
4. Какую версию Python использовать с Flask 3.x?
Flask 3.x требует Python 3.8+. Лучший выбор — Python 3.10 или 3.12.
5. Что такое Blueprint и когда его подключать?
Blueprint разбивает Flask-приложение на модули: auth, blog, api. Подключай его, когда в app.py становится больше 5–7 маршрутов — поддерживать код станет намного проще.
Удостоверение о повышении квалификации, которое можно вписать в резюме. Официально, реально. Записаться →
Об авторе
Дмитрий Орлов — Инженер-программист, основатель детской IT-школы.
Выпускник МФТИ, бывший инженер в крупной технологической компании. В 2019 году открыл детскую школу программирования, через которую прошли более 500 учеников. Эксперт в подготовке детей к олимпиадам по информатике, тренер призёров регионального этапа ВсОШ.
Опыт: 10 лет в разработке, 5 лет в EdTech · Специализация: C++, Java, подготовка к олимпиадам
Вас оценивают по вашим слайдам — хотите ли вы, чтобы они говорили о вас лучшее? Выбрать курс →
Вам будет интересно
Вас оценивают по вашим слайдам — хотите ли вы, чтобы они говорили о вас лучшее? Выбрать курс →
*Статья содержит партнёрскую ссылку; при покупке по ней автор получает вознаграждение. ООО "ЭДЮСОН", ИНН: 7729779476, erid: 5jtCeReNwxHpfQTGQpntmtK