Здравствуйте! Меня зовут Михаил, и я пишу эту статью специально для начинающих программистов, желающих изучить основы веб-разработки с использованием 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.py
app.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-worldIscander_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, попробовать понятие такое создать, фрагмент памяти. Потом в другой статье он про бд почитает, про пакетный менеджер, про гит.
Если в одной статье пытаться уместить ещё что-то, то у начинающего программиста просто не хватит памяти эффективно хоть что-нибудь запомнить