Здравствуйте! Меня зовут Михаил, и я пишу эту статью специально для начинающих программистов, желающих изучить основы веб-разработки с использованием Flask. Я сам активно занимаюсь разработкой проектов на Flask и хочу поделиться своими знаниями и опытом, чтобы помочь вам начать свой путь в мире веб-разработки.
Flask — это прекрасный выбор для тех, кто уже знаком с основами Python и хочет применить эти знания в создании веб-приложений. Этот микро-фреймворк, написанный на Python, отличается своей простотой и гибкостью, делая его доступным для начинающих, в то же время предлагая мощные возможности для создания сложных приложений.
Требуемые навыки для чтения статьи:
Основы Python: понимание основных конструкций языка и способность писать простые программы.
Знакомство с HTML: базовое понимание тегов и структуры веб-страниц будет полезно.
Ориентировочное время чтения: Примерно 15-20 минут.
Содержание
- 
Введение
Краткое описание Flask и его популярности в мире веб-разработки.
- 
Обсуждение ключевых преимуществ Flask:
Простота и Минимализм: Flask предоставляет основной набор инструментов для веб-разработки, делая его идеальным для начинающих.
Гибкость и Расширяемость: Возможность легко интегрировать с другими библиотеками и сервисами.
Подход "Микро-фреймворк": Flask позволяет разработчикам сохранять контроль над своим приложением, выбирая только необходимые инструменты и библиотеки.
Большое сообщество и поддержка: Благодаря своей популярности, Flask имеет обширное сообщество и множество доступных ресурсов для обучения и поддержки.
 
 - 
Установка и настройка
Инструкция по установке Flask.
Создание базового проекта на Flask.
 - 
Основы Flask
Обзор основных концепций: маршрутизация, представления, шаблоны.
Пример простого веб-приложения (например, приложение "Hello, World!").
 - 
Работа с данными
Объяснение, как обрабатывать входящие запросы.
Работа с формами и отправка данных.
 - 
Использование шаблонов
Введение в шаблонизатор Jinja2, который используется во Flask.
Пример создания веб-страницы с использованием шаблонов.
 - 
База данных в Flask
Обзор интеграции с базами данных (например, SQLite).
Пример простого CRUD-приложения (Создание, Чтение, Обновление, Удаление).
 - 
Заключение
Итоги о том, как Flask может быть использован для создания масштабируемых веб-приложений.
Рекомендации по дальнейшему изучению Flask и расширению знаний.
 
Установка и настройка Flask
Flask - это легкий и мощный веб-фреймворк для Python, который можно легко установить и настроить. В этом разделе мы покажем, как начать работу с Flask на вашем компьютере.
- 
Установка Python
Для работы с Flask вам понадобится Python версии 3.6 или выше. Если у вас еще не установлен Python, вы можете скачать его с официального сайта Python python.org.
 - 
Установка Flask
- 
Flask можно установить с помощью инструмента управления пакетами Python, pip. Откройте терминал или командную строку и введите команду:
pip install Flask Эта команда установит Flask и все необходимые зависимости.
 - 
 - 
Создание базового проекта Flask
Создайте новую папку для вашего проекта и перейдите в нее в терминале.
Внутри папки проекта создайте файл, например,
app.py, который будет основным файлом вашего веб-приложения.- 
Откройте
app.pyв текстовом редакторе и напишите следующий код:from flask import Flask app = Flask(name) @app.route('/') def hello_world(): return 'Hello, World!' if name == 'main': app.run(debug=True) Этот код создает базовое веб-приложение, которое отображает "Hello, World!" на главной странице.
 - 
Запуск приложения
- 
Чтобы запустить приложение, вернитесь в терминал и выполните команду:
python app.py После этого откройте веб-браузер и перейдите по адресу
http://127.0.0.1:5000/. Вы должны увидеть сообщение "Hello, World!".
 - 
 
Эти шаги демонстрируют, как легко начать работу с Flask. Вы установили Flask, создали простое приложение и успешно запустили его на локальном сервере.
Основы Flask
Flask предлагает гибкий и интуитивно понятный способ создания веб-приложений. Основой Flask является маршрутизация запросов и генерация ответов. В этом разделе мы рассмотрим эти ключевые концепции.
- 
Маршрутизация
Маршрутизация в Flask отвечает за соединение функций с конкретными URL-адресами. Это позволяет вашему приложению реагировать на разные URL, например, отображать разные страницы.
- 
Пример маршрута:
@app.route('/about') def about(): return 'This is the about page' В этом примере, если пользователь перейдет по адресу
http://127.0.0.1:5000/about, он увидит сообщение "This is the about page".
 - 
Представления и Функции
Представления в Flask – это функции Python, которые обрабатывают запросы и возвращают ответы. Как правило, ответ представляет собой HTML-страницу, но это также может быть текст, JSON или XML.
- 
Пример функции представления:
@app.route('/user/<username>') def show_user_profile(username): return f'User {username}' Эта функция возвращает пользовательское имя, которое передается в URL.
 - 
Использование Шаблонов
Flask использует систему шаблонов Jinja2, которая позволяет создавать HTML-страницы с динамическим содержимым.
- 
Пример использования шаблона:
from flask import Flask from flask import render_template app = Flask(name) @app.route('/hello/<name>') def hello(name): return render_template('hello.html', name=name) if name == 'main': app.run(debug=True) # debug true задаем специально для разработки (в данном случае при обновление/изменение кода приложение автоматически само обновит данные на сайте) Здесь мы передаем переменную
nameв шаблонhello.html, который может динамически отображать разное содержимое в зависимости от переданного значения.- 
Конечно, давайте добавим пример кода для шаблонаhello.html, который будет использоваться в нашем примере с Flask. Этот шаблон будет простым HTML-документом, который динамически отображает имя пользователя, переданное через URL.Пример кода для hello.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello Page</title> </head> <body> <h1>Hello, {{ name }}!</h1> <p>Welcome to our simple Flask app.</p> </body> </html>В этом шаблоне используется Jinja2 синтаксис для вставки переменной
nameв HTML. Когда Flask обрабатывает этот шаблон, он заменяет{{ name }}на значение, переданное в функциюhello(name).Этот шаблон должен быть сохранен в папке
templatesв корне вашего проекта Flask. Flask автоматически ищет шаблоны в папке с именемtemplates, поэтому важно соблюдать эту структуру для корректной работы приложения Пример структуры проекта
/your-app /static /templates app.pyapp.py: Это основной файл вашего приложения, где вы определяете маршруты, представления и бизнес-логику. В этом файле вы создаете экземпляр приложения Flask и запускаете сервер.
/templates: Это директория, в которой хранятся все HTML-шаблоны. Flask автоматически ищет шаблоны в папке с именем
templates. Примеры шаблонов могут включатьhello.html,index.html,about.htmlи так далее./static: Эта папка используется для хранения статических файлов, таких как CSS-стили, JavaScript-скрипты, изображения и другие файлы, которые не изменяются в процессе работы приложения. Flask автоматически обрабатывает запросы к этим файлам.
Эта структура является довольно стандартной для небольших проектов на Flask. Для более сложных приложений вы можете добавить дополнительные папки и файлы, например, для моделей базы данных, утилит, тестов и так далее. Однако даже в сложных проектах обычно сохраняется базовая организация с папками
staticиtemplates.Теперь у вас есть полный пример, как использовать шаблоны в Flask для динамического отображения данных. Это базовый пример, но он хорошо демонстрирует мощь и гибкость шаблонизатора Jinja2 в сочетании с Flask.
 
Эти основные концепции являются ключевыми для понимания и создания веб-приложений с помощью Flask. Они позволяют вам строить структурированные и масштабируемые веб-приложения.
Работа с данными в Flask
- 
Обработка входящих запросов
Flask обеспечивает простой способ обработки входящих запросов, будь то GET или POST запросы. Это делается через маршрутизацию и функции представлений.
- 
Пример обработки GET запроса:
@app.route('/greet/<name>') def greet(name): return f'Hello, {name}!'В этом примере, Flask обрабатывает запрос к URL
/greet/<name>и возвращает приветствие с именем пользователя. - 
Пример обработки POST запроса:
from flask import request @app.route('/submit', methods=['POST']) def submit(): name = request.form['name'] return f'Hello, {name}'Здесь мы обрабатываем POST запрос и извлекаем данные из формы.
 
 - 
Работа с формами
Для работы с формами в Flask часто используется объект
request, который позволяет получить доступ к данным, отправленным пользователем.- 
Пример HTML-формы:
<form method="post" action="/submit"> <input type="text" name="name"> <input type="submit" value="Submit"> </form>Эта форма отправляет данные на маршрут
/submit, который мы обрабатываем в нашем Flask приложении. 
 - 
Отправка данных
Flask позволяет не только принимать данные, но и отправлять их обратно пользователю. Это может быть в виде HTML, JSON, XML и других форматов.
- 
Пример отправки JSON:
from flask import jsonify @app.route('/data') def data(): return jsonify({'key': 'value'})Этот маршрут возвращает данные в формате JSON.
 
 
Эти примеры демонстрируют основные способы работы с данными в Flask. От обработки простых GET запросов до более сложных операций с формами и отправки данных, Flask предлагает гибкий и мощный инструментарий для веб-разработчиков.
Интеграция с базами данных в Flask
- 
Выбор базы данных
Flask поддерживает интеграцию с множеством различных баз данных, включая SQL и NoSQL. Выбор базы д
анных зависит от нужд вашего приложения. Для простых приложений популярным выбором является SQLite из-за его легкости и неприхотливости в настройке.
 - 
Использование SQLAlchemy
SQLAlchemy - это ORM (Object-Relational Mapping) библиотека для Python, которая облегчает работу с базами данных SQL. В Flask ее можно использовать для упрощения операций с базой данных.
- 
Пример подключения к базе данных с использованием SQLAlchemy:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(name) # подключение базы данных app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app)Здесь мы конфигурируем подключение к SQLite базе данных.
 
 - 
Создание моделей
Модели в SQLAlchemy представляют таблицы баз данных. Они позволяют взаимодействовать с данными на более высоком уровне абстракции.
- 
Пример создания модели:
class 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) def __repr__(self): return f'<User {self.username}>' 
 - 
Операции CRUD
CRUD означает Создание (Create), Чтение (Read), Обновление (Update), Удаление (Delete). SQLAlchemy упрощает выполнение этих операций.
- 
Пример создания нового пользователя:
new_user = User(username='newuser', email='email@example.com') db.session.add(new_user) db.session.commit() - 
Пример чтения пользователя:
User.query.filter_by(username='newuser').first() 
 - 
Миграции
Для управления изменениями в структуре базы данных можно использовать расширение Flask-Migrate. Оно облегчает процесс создания и применения миграций.
 
Этот раздел статьи дает представление о том, как начать работу с базами данных в Flask. Использование ORM, такого как SQLAlchemy, может значительно упростить разработку и поддержку ваших веб-приложений.
Заключение
В этой статье мы рассмотрели основные аспекты работы с Flask, включая
установку,
основы маршрутизации и представлений,
работу с шаблонами,
обработку данных и интеграцию с базами данных.
Flask демонстрирует свою силу как легкий, но мощный инструмент для создания веб-приложений на Python. Его простота и гибкость делают его отличным выбором как для начинающих, так и для опытных разработчиков.
Если у вас остались или появились какие-то вопросы готов помочь разобраться начинающим программистам по работе с Flask
Спасибо за ваше уделенное время и поддержку!
Комментарии (30)

amateur80lvl
27.12.2023 15:09+5Он ещё живой?
Ничего хуже, наверное, придумать уже нельзя, но для широких масс чем хуже - тем лучше.
Новичкам точно не рекомендую.

Iscander_Che
27.12.2023 15:09-1Ну не Django же.

amateur80lvl
27.12.2023 15:09+1Упаси.
Но Django как референс - вполне годная кодовая база. Сверяться с owasp тоже обязательно.

Iscander_Che
27.12.2023 15:09Django, с одной стороны, хорош как многофункциональный комбайн. И я некоторые идеи оттуда реализовал в песочнице на Flask. Но с другой, по причине той же "комбайнутости", вряд ли бы рекомендовал его для новичков. Даже не смотря (и вообще не смотря, если честно) на наличие руководств "Джанго для девочек".
Вопрос в том, почему "ничего хуже". Разверните, пожалуйста, если не трудно.

amateur80lvl
27.12.2023 15:09Вопрос в том, почему "ничего хуже".
Это моё субъективное мнение подкреплённое практическим опытом. Мы регулярно пытались переползти на какой-нибудь фреймворк, чтобы избавиться от поддержки своих кастомных примочек, и Flask был наихудшим вариантом. Pyramid выглядел лучше всех, но до него дело так и не дошло.
Разверните, пожалуйста, если не трудно.
Лет шесть уже вэбом серьёзно не занимаюсь, поэтому, наверное, трудно. Поисковики с радостью расскажут если спрость что-нибудь вроде flask sucks. У меня была ссылка на годный разбор почему там всё плохо - я её прикладывал для отчёта о проделанной работе, но за давностью времени затерялась.
Вообще выбор фреймворка - та ещё тема.

Iscander_Che
27.12.2023 15:09Спасибо за вполне развёрнутый ответ. Pyramid - будем посмотреть.

amateur80lvl
27.12.2023 15:09Для простых вещей советую глянуть на hypercorn. Голый ASGI весьма притягателен, а если чего не хватает - так можно из starlette, например, понадёргать нужного. Хотя starlette вполне себе ничего, но у меня бзык на минимализм.

Iscander_Che
27.12.2023 15:09Я тоже люблю минимализм. Так что изучу ваши предложения с удовольствием.

kit_oz
27.12.2023 15:09Зря вы так. Прекрасный инструмент, прекрасно выполняющий свою работу. Вкупе с DRF достаточно прозрачно и быстро собирается api для фронта

plustilino
27.12.2023 15:09Он ещё живой?
Если погуглить, то flask по использованию вдруг оказывается даже немного популярнее django. Так что фраза престранная.

srrymom
27.12.2023 15:09Почему? По-моему, это идеальный вариант для новичков. Из-за того что он очень простой, даже при полном отсутствии опыта можно быстро накидать веб-приложение. А из‑за того что он очень популярный, по нему есть куча материалов, в т.ч. на русском.Есть какая-то альтернатива?

chilic
27.12.2023 15:09+1Вот тут, много лет назад и довольно хорошо было написанно:
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
Iscander_Che
27.12.2023 15:09+1Более того, там готов мега туториал 2024, в котором обсуждаются новые фичи в Flask 3 и новые же фичи нового релиза (версию не помню) Flask-SQLAlchemy.

lair
27.12.2023 15:09+5Weird.
Вот, значит, смотрим в эту статью:
from flask_sqlalchemy import SQLAlchemy app = Flask(name) # подключение базы данных app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app)class 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)Смотрим во вчерашнюю статью:
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # Конфигурация базы данных (SQLite) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app) # Модель для таблицы "users" class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) age = db.Column(db.Integer, nullable=False)Это у людей настолько фантазия одинаково работает?

select26
27.12.2023 15:09+1Примеры просто из туториала с незначительными изменениями.
Что можно изобрести для Hello World?
m_nikitin_dev Автор
27.12.2023 15:09для начинающих всегда Hello World для знакомства как установить
дальше уже идея описать как и что можно создать и описать доп решения и идеи

lair
27.12.2023 15:09+1Я и говорю: фантазия не работает дальше "взять пример из туториала". Непонятно только, в чем смысл статьи тогда, если можно просто туториал взять.

DessDaz1996
27.12.2023 15:09-1Мой первый Hello World был как раз написан через Flask. Из плюсов он достаточно лёгкий и гибкий. Django в этом отношении проигрывает. Он более тяжёлый.

krote
27.12.2023 15:09+4Ну блин, накидали никак не связанных кусков "примеров", а почему было не построить шаг за шагом мини-приложение с добавлением-редактированием-удалением пользователей и соответственно авторизацией, раз уж таблицу user сделали.

m_nikitin_dev Автор
27.12.2023 15:09согласен с вами
в первой статье хотел описать как начать работать
и завести фреймворк чтобы он начал работать
дальше уже в планах описать дополнительные идеи как и что настраивать и описать
спасибо за ваш комментарий
учту дополнительную структуру шаг за шагом для сл статьи

AndrewBond
27.12.2023 15:09+1На мой субъективный взгляд, проблема "статей про flask" в том, что полно hello world и чертовски мало чего-то более сложного. Или чего-то несложного, но прикольного (какие-то интересные частные случаи). Или то же самое про SQLAlchemy.

gromyko21
27.12.2023 15:09+1Начинающие питонисты, смотрите лучше на FastApi. Не нужен вам этот flask))

m_nikitin_dev Автор
27.12.2023 15:09Fast Api подходит больше для уже дальнейшего развертывания фронта отдельно
и back на fast api
Flask больше дает возможности совместить фронт и бэк сразу
для тех кто только начинает думаю что фляск поможет быстрее развернуть сайт

A-V-tor
27.12.2023 15:09+2Слушайте, конечно спасибо, но какой толк копировать страничку "quick start" и выдавать ее новичкам? В сети куча нормальных подобных инструкций и гайдов... Если Вы действительно работали и хотите чем то поделиться, так напишите о чем то действительно полезном и уникальном. Или это лучшие практики из вашего опыта?

m_nikitin_dev Автор
27.12.2023 15:09quick start взял чтобы описать первую статью
дальше чтобы показать уже какие-то идеи и описать шаг за шагом что можно сделать как проект

Mimik_fc7
27.12.2023 15:09Исправьте пожалуйста заголовок на : Вы новичок в вебе, хотите освоить, не трогайте и на милю не подходите к этому го..ну, возьмите нормальный фреймворк.
          
 
icya
А почему бы не упомянуть в двух словах об использовании виртуальных окружений? И новички ничего не поломают случайно, и полезные практики сразу в привычку будут входить.
Для новичков было бы неплохо расписать как работать с миграциями (хотя бы на уровне вызова основных команд)
metro6
Совет начинающему программисту: "Смотри на все как в Википедии - если чёт не знаешь, тыкай и ищи об этом".
И дело не в том, что начинающий программист не нашел в статье понятия об инструменте работы с пакетами или о чем-то ещё. Дело в том, что начинающий программист должен взять маленький кусочек о Flask, попробовать понятие такое создать, фрагмент памяти. Потом в другой статье он про бд почитает, про пакетный менеджер, про гит.
Если в одной статье пытаться уместить ещё что-то, то у начинающего программиста просто не хватит памяти эффективно хоть что-нибудь запомнить