В этой статье мы познакомим вас с Flask, популярным микрофреймворком для Python, который предлагает альтернативу гиганту Django.
Flask разработан для легкости и гибкости, что позволяет разработчикам быстро и легко создавать веб-приложения. В этой статье мы рассмотрим, что такое Flask, его ключевые особенности, преимущества его простой API, его гибкость в поддержке сторонних расширений, наиболее распространенные расширения Flask, а также когда и когда не стоит использовать Flask.
Ключевые выводы
Что такое Flask?
Flask — это микрофреймворк для создания веб-приложений, написанный на Python. Он построен на простом принципе сохранения вещей простыми и легкими, предоставляя разработчикам только самые важные инструменты, необходимые для создания веб-приложений, без ненужной сложности.
Он построен на основе набора инструментов Werkzeug WSGI, который обеспечивает функциональность веб-сервера для обработки запросов и ответов, и движка шаблонов Jinja2, который позволяет Flask обрабатывать HTML-шаблоны, позволяя разработчикам создавать динамические веб-приложения.
Вот некоторые ключевые особенности Flask, которые делают его таким отличным фреймворком для работы:
- У него простой API для создания веб-маршрутов и обработки запросов.
- Движок Jinja для шаблонов поддерживает шаблоны HTML, что позволяет разработчикам легко создавать веб-страницы.
- Он очень расширяемый, благодаря поддержке сторонних расширений, поэтому разработчик может устанавливать расширения в зависимости от потребностей своего проекта.
- В комплекте идет сервер разработки, который упрощает тестирование и отладку приложений.
В целом, Flask предоставляет мощный, гибкий, но простой фреймворк для создания веб-приложений. Это хороший выбор как для новичков, так и для опытных веб-разработчиков, и является одним из самых популярных веб-фреймворков в экосистеме веб-разработки на Python.
Преимущества Flask
Давайте теперь более подробно рассмотрим некоторые из преимуществ использования Flask в разработке.
Простота. Философия дизайна Flask подчеркивает простоту, что облегчает понимание и использование разработчикам любого уровня. Это также означает, что у разработчиков очень минимальный период обучения, поскольку им нужно изучить всего несколько концепций и API, чтобы начать создавать веб-приложения.
Гибкость. Микрохарактер Flask — предоставление только основных функций веб-фреймворка — дает разработчикам возможность настроить и расширить его в соответствии со своими требованиями с помощью расширений Flask или сторонних библиотек.
Документация. Документация Flask очень подробная, с хорошим охват
Совместимость. Flask совместим с широким спектром версий Python, что делает его легким в использовании с существующими базами кода Python. Он также поддерживает множество веб-серверов, что упрощает развертывание на различных хостинг-платформах.
Быстрое развитие. Простота и гибкость Flask уменьшают необходимость в шаблонном коде для настройки приложения, что позволяет разработчикам быстро начать работу.
Вокруг Веб, Flask используется во многих интересных случаях. Несколько примечательных примеров:
- PgAdmin. Администрирование баз данных Postgres работает на экземпляре Flask, предоставляя разработчикам интерфейс для управления своими базами данных Postgres.
- Twilio. Это платформа для коммуникаций, которая использует Flask в нескольких своих API.
- Pinterest. Это приложение для обмена фотографиями использует Flask в стеке веб-разработки, что позволяет команде легко создавать некоторые настраиваемые функции и интеграции.
Когда использовать Flask
Простота и легкость использования Flask делают его отличным выбором для широкого круга веб-проектов:
- Прототипирование. Его легкость использования и гибкость делают его отличным выбором для быстрого создания прототипов, позволяя разработчикам быстро строить и тестировать новые функции.
- Создание RESTful API. Его собственный простой API делает легким создание и обработку HTTP-запросов.
- Приложения электронной коммерции. Flask хорошо подходит для создания онлайн-рынков и платформ электронной коммерции.
- Финансы. Это полезно для создания финансовых приложений, включая управление учетными записями, обработку транзакций и отслеживание инвестиций.
- ИИ. Он предлагает удобный и простой способ создания и развертывания моделей обучения ИИ.
Когда не стоит использовать Flask
Хотя Flask — отличный фреймворк с множеством преимуществ и отличными возможностями, есть ситуации, когда эти функции работают против него. Давайте рассмотрим некоторые проекты, которым лучше подходят другие типы фреймворков.
Проекты, требующие встроенной функциональности. Будучи микрофреймворком, Flask предоставляет только основные компоненты, необходимые для создания веб-приложения. Если проект требует, например, интерфейса администратора, аутентификации или ORM, то Django является лучшим вариантом.
Проекты с строгими требованиями к безопасности. Поскольку Flask — гибкий фреймворк, мы должны полагаться на сторонние расширения для реализации определенного уровня безопасности в наших приложениях. Хотя это, безусловно, работает, лучше полагаться на более проверенный временем фреймворк, который принимает более безопасный подход, такой как Tornado или Twisted.
Проекты, настаивающие на определенном стандарте кодирования. Из-за гибкости Flask разработчики могут создавать приложения любым способом, каким только захотят. Однако такие фреймворки, как Django, гарантируют, что разработчики следуют определенной конвенции, что означает, что разработчики могут легко переходить от одного проекта к другому.
Настройка окружения разработки Flask
Давайте теперь рассмотрим, как начать работу с Flask, начиная с настройки окружения для разработки, установки и, наконец, запуска минимального приложения.
Предварительные требования
Python должен быть установлен на машине разработчика. Вот инструкции для этого (хотя мы можем уже иметь его установленным).
Создание виртуального окружения
A virtual environment is an isolated Python environment where we can install packages for a given project without affecting the global Python installation. (Here’s further discussion about why virtual environments are useful.) There are different packages for creating virtual environments in Python, such as virtualenv, venv, or Conda.
В этой статье мы будем использовать virtualenv
. Мы можем установить его с помощью следующей команды:
pip install virtualenv
После установки virtualenv
, мы можем создать директорию, где будет находиться наше приложение Flask. Мы можем назвать директорию как угодно, кроме Flask
, так как это может вызвать конфликты. Мы назовем нашу директорию flask_intro
:
mkdir flask_intro
Далее, перейдите в эту директорию, чтобы начать ее использовать:
cd flask_intro
В этой директории, сейчас давайте создадим наше виртуальное окружение, используя следующую команду:
virtualenv myenv
Команда выше создает виртуальное окружение и называет его myenv
. Давайте активируем его, чтобы установить в нем Flask. Чтобы активировать виртуальное окружение на Linux или macOS, используйте следующую команду:
. myenv/bin/activate
На Windows, используйте эту команду:
. myenv\Scripts\activate
После активации нашего виртуального окружения, оно покажет имя виртуального окружения в командной строке, подобно следующему выводу:
(myenv)/~(path to your project directory)$
В рамках нашей активированной виртуальной среды мы можем продолжить и установить Flask, используя следующую команду:
pip install Flask
После завершения установки Flask, давайте создадим минимальное приложение. Мы создадим модуль, который будет содержать наше приложение Flask. Для простоты, назовем его hello.py
. На Linux или macOS мы можем использовать следующую команду для создания файла в нашем каталоге flask_intro
:
touch hello.py
Команда выше создает файл с именем hello.py
. Мы также можем использовать среду разработки для создания файла. После создания файла, вставьте следующий код в него и сохраните:
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
В коде выше мы импортируем класс Flask
из модуля flask
, затем создаем экземпляр Flask
, который мы называем app
и передаем переменную __name__
.
Затем у нас есть декоратор маршрута @app.route(“\”)
, который означает, что функция hello_world()
будет запущена, когда кто-то посетит корневой маршрут нашего приложения после его запуска.
Существует несколько способов запуска приложения, поэтому давайте рассмотрим некоторые из них. Первый способ – передать команде flask
ряд аргументов: --app
, затем имя модуля, содержащего наше приложение Flask, и затем run
. Смотрите ниже:
flask –app <the name of your module> run
Используя пример выше для запуска нашего примера приложения:
flask –app hello run
Это запустит нашу программу на порту по умолчанию 5000
, так что приложение будет доступно по адресу http://localhost:5000/
или по адресу http://127.0.0.1:5000/
. Если мы хотим, чтобы приложение было доступно на другом порту, мы можем указать порт, используя опцию -p
или --port
. Например:
flask --app hello run --port=8080
Это запустит сервер на порту 8080. Другой способ запустить приложение – просто использовать команду flask run
. Однако для того чтобы это сделать, нам нужно сообщить Flask имя модуля, который будет содержать экземпляр Flask, и мы делаем это, устанавливая переменную окружения FLASK_APP
. В нашем случае Flask-приложение находится в файле с именем hello.py
. Поэтому мы можем установить его следующим образом:
export FLASK_APP=hello
Теперь, когда мы установили переменную окружения FLASK_APP
, мы можем запустить сервер разработки следующим образом:
flask run
С этим кодом у нас теперь работает веб-приложение. Это демонстрирует основную философию Flask: нам не нужно много шаблонного кода, чтобы начать работу. Однако приложение, которое мы настроили выше, не очень функционально и полезно, поскольку оно просто отображает строку “Hello World!” на нашей веб-странице. Чтобы сделать что-то более полезное, мы можем обратиться к шаблонам. Мы рассмотрим, как их обрабатывать, далее.
Шаблоны Flask
Шаблоны Flask – это способ создания динамических веб-страниц, которые могут отображать различное содержимое в зависимости от различных факторов, таких как данные из базы данных или ввод пользователя. Шаблоны в Flask представляют собой комбинацию HTML и специальных местозаполнителей, называемых переменными шаблона, которые заменяются фактическими значениями во время выполнения.
Шаблоны хранятся в директории templates
. Чтобы использовать шаблоны, нам нужно импортировать метод render_template()
из flask
. Метод render_template()
принимает имя шаблона и любые необязательные данные, которые необходимо передать шаблону.
Давайте рассмотрим пример функции, которая использует шаблон для отображения веб-страницы:
# index.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
title = 'Welcome to my website!'
message = 'This is an example of using Flask templates.'
return render_template('index.html', title=title, message=message)
В примере выше у нас есть функция представления — index()
— которая привязана к корневому URL (“/”) декоратором @app.route()
. Функция имеет два переменных, title
и message
. Наконец, мы передаем шаблон index.html
методу render_template()
, вместе с переменными title
и message
.
Для того чтобы код выше работал, нам нужно иметь шаблон index.html
в директории шаблонов. Таким образом, шаблон будет выглядеть примерно так:
# index.html
<!doctype html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</body>
</html>
В файле index.html
заполнители {{title}}
и {{ message }}
заменяются значениями, переданными в шаблон методом render_template()
.
Шаблоны также могут включать более сложную логику, такую как if
операторы и for
циклы, что позволяет генерировать более динамичные страницы.
Таким образом, шаблоны в Flask предоставляют разработчикам очень мощный инструмент для создания динамических веб-страниц, богатых информацией, созданной пользователями.
Маршрутизация в Flask
Большинство веб-приложений имеют более одного URL, поэтому нам нужен способ узнать, какая функция обрабатывает какой URL. В Flask этот маппинг известен как маршрутизация — процесс привязки или маппинга URL к функциям представления. Привязывание URL к функциям представления позволяет приложению обрабатывать различные типы запросов, такие как GET
, POST
, PUT
, DELETE
и другие. Это также позволяет приложению обрабатывать множество запросов от разных клиентов.
Для настройки маршрутов в Flask мы используем route()
декоратор. Декоратор привязывает URL к функции представления — поэтому, когда пользователь посещает URL, который существует в нашем приложении, Flask запускает связанную функцию представления для обработки запроса.
Давайте рассмотрим пример:
# hello.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/about")
def about():
return "This is the about page"
В примере выше мы определяем URL о приложении (/about
). Когда приложение получает запрос на URL about
, Flask вызывает функцию about()
, которая возвращает строку “Это страница описания”.
До сих пор, хотя эти примеры возвращают разные страницы, они все используют только HTTP-запрос GET
. Чтобы иметь возможность обрабатывать любой конкретный запрос, мы можем указать HTTP-метод в качестве необязательного аргумента для декоратора route()
.
Давайте рассмотрим пример запроса PUT
:
from flask import Flask, request
app = Flask(__name__)
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
# получить данные пользователя из тела запроса
data = request.get_json()
# выполнить что-то с данными пользователя, например, обновить пользователя в базе данных
# ...
# вернуть ответ, указывающий на успех или неудачу
return {'message': f'User {user_id} updated successfully'}, 200
В этом примере мы определяем маршрут, который обрабатывает запрос PUT
для обновления деталей пользователя по его user_id
. Мы используем <int:user_id>
в маршруте, чтобы указать, что идентификатор пользователя должен быть целым числом.
В функции update_user()
мы получаем данные пользователя из тела запроса с помощью метода request.get_json()
. Мы выполняем что-то с данными пользователя, например, обновляем пользователя в базе данных, а затем возвращаем ответ, указывающий на успех или неудачу, вместе с кодом состояния HTTP (в данном случае 200
, чтобы показать успех).
В целом, маршрутизация позволяет Flask обрабатывать различные типы запросов и позволяет нашему приложению обрабатывать и действовать на данные по-разному, в зависимости от URL, который посещает пользователь.
Формы Flask и проверка
Помимо отображения данных для пользователей, шаблоны Flask также могут принимать входные данные от пользователей для дальнейшей обработки или хранения. Для этого Flask предоставляет встроенную поддержку обработки HTML-форм и управления входными данными пользователей. Формы Flask основаны на библиотеке WTForms, которая предоставляет гибкий и мощный способ управления данными формы и выполнения проверок. Однако библиотека не является частью стандартной установки Flask, поэтому нам нужно установить её с помощью следующей команды:
pip install WTForms
После установки WTForms, для использования форм в Flask нам нужно определить класс формы, который будет наследовать от flask_wtf.FlaskForm
. Этот класс будет содержать поля, которые будут находиться на форме, и любые правила валидации, которые должны быть применены к ним.
Давайте рассмотрим пример формы входа:
# forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, Length
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
submit = SubmitField('Log In')
В примере выше мы определяем форму входа с двумя полями — email
и password
— и кнопкой отправки. Также у нас есть аргумент validators
, который используется для указания правил валидации для каждого поля. Например, в данном случае нам нужно, чтобы поле email
содержало действительный адрес электронной почты, а поле password
— пароль не менее шести символов.
Определив класс формы, мы можем использовать его в функции представления входа для отображения формы и обработки данных формы, отправленных пользователем. Давайте рассмотрим пример функции представления:
# views.py
from flask import render_template, request
from .forms import LoginForm
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
# что-то делаем с данными формы
return render_template('login.html', form=form)
В примере выше у нас есть представление login
, которое принимает два метода HTTP (GET
и POST
), так что когда пользователи обращаются к URL из браузера, LoginForm
отображается в виде HTML-формы с использованием метода render_template
, и когда пользователь отправляет форму, мы проверяем, является ли форма действительной с помощью метода validate_on_submit
. Если форма действительна, мы получаем email и пароль.
Форма login.html
может выглядеть примерно так:
# login.html
<h1>Login</h1>
<form method="POST">
{{ form.csrf_token }}
<div>
{{ form.email.label }} {{ form.email() }}
{% for error in form.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div>
<div>
{{ form.password.label }} {{ form.password() }}
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div>
{{ form.submit() }}
</form>
Вышеуказанный шаблон отобразит поля <код>email и <код>password вместе с их метками и кнопку отправки с текстом “Login”. Поле <код>form.csrf_token включено для предотвращения атак межсайтовой подделки запросов (CSRF). Циклы <код>{% for %} используются для отображения любых возможных ошибок валидации.
Использование форм Flask предоставляет мощный способ обработки ввода пользователя, и мы сможем проверить данные, которые они вводят.
Расширения Flask
Как мы видели, Flask – это микрофреймворк, который включает только самые важные части, необходимые для создания веб-приложения. Однако, если нам нужно добавить функциональность, которой нет в стандартной поставке Flask, нам нужно добавить пакеты в установку. Расширения Flask – это способ предоставления этой дополнительной функциональности. Мы можем просто установить нужный нам пакет. Существует множество расширений, созданных сообществом Flask.
Вот некоторые из самых популярных:
- Flask-SQLAlchemy: предоставляет интеграцию с набором инструментов SQLAlchemy, который упрощает взаимодействие с базами данных.
- Flask-Login: предоставляет аутентификацию пользователей и управление сессиями для Flask.
- Flask-Mail: предоставляет простой интерфейс для отправки писем из Flask.
Существует сотни расширений, созданных сообществом Flask, для обработки различной функциональности. Использование расширений, как правило, проста. Во-первых, нам нужно установить расширение, которое мы хотим, используя pip.
Давайте рассмотрим пример использования Flask-SQLAlchemy. Во-первых, нам нужно его установить:
pip install flask-sqlalchemy
Дальше нам нужно настроить его. К примеру:
# sqlalchemy_example.py
from flask import Flask
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)
def __repr__(self):
return '<User %r>' % self.username
В примере выше у нас есть модель User
с полем username
и email
. Мы также настраиваем SQLALCHEMY_DATABASE_URI
, указывая, что мы используем базу данных SQLite, расположенную по адресу example.db
. С этим настроенным, у нас теперь есть доступ к объекту db
, который позволяет нам взаимодействовать с базой данных. Например, мы могли бы создать нового пользователя и добавить его в базу данных, вот так:
#views.py
from app import db, User
user = User(username='john', email='[email protected]')
db.session.add(user)
db.session.commit()
С помощью расширений Flask, наше приложение способно иметь больше функциональности, чем обычно имеет с основным исполнением Flask.
Заключение
В этой статье мы представили Flask, легкий и гибкий веб-фреймворк для Python. Мы обсудили преимущества использования Flask для веб-разработки, включая его простоту, гибкость и легкость использования. Мы также рассмотрели, как настроить среду разработки, создать маршруты, использовать шаблоны, обрабатывать формы и использовать расширения, такие как Flask-SQLAlchemy.
Подводя итог, Flask — отличный выбор для создания веб-приложений любого размера, от небольших личных проектов до крупномасштабных коммерческих приложений. Его легко изучить и использовать, но он также предлагает продвинутые функции через множество своих расширений.
Если вы заинтересованы в изучении Flask, вот некоторые дополнительные ресурсы:
- Документация Flask
- Флэск Мега-Учебник, автор Мигель Гринберг
- Разработка Веб-Приложений на Флэск, автор Мигель Гринберг
- A simple Flask app tutorial
- Реальные уроки Флэск от Real Python
Если вы хотите узнать больше о Django и Flask и их лучших сценариях использования, проверьте Веб-разработку на Python с Django и Flask.
Часто задаваемые вопросы о Flask, Python-фреймворке
Что такое Flask?
Flask — это микро-фреймворк для Python. Он разработан так, чтобы быть легким и удобным в использовании, что делает его отличным выбором для разработки веб-приложений и API.
Как установить Flask?
Вы можете установить Flask с помощью pip, менеджера пакетов для Python. Используйте команду pip install Flask
для установки Flask на вашу систему.
Каковы основные особенности Flask?
Flask славится своей простотой, гибкостью и минимализмом. Он предоставляет такие функции, как маршрутизация URL, обработка запросов и рендеринг шаблонов, позволяя разработчикам выбирать и интегрировать другие компоненты по мере необходимости.
Как Flask сравнивается с другими веб-фреймворками на Python, такими как Django?
Flask является микро-фреймворком, в то время как Django представляет собой полнофункциональный веб-фреймворк. Flask предлагает большую гибкость и свободу в выборе компонентов, тогда как Django поставляется с множеством встроенных функций и конвенций.
Могу ли я создавать RESTful API с помощью Flask?
Да, Flask хорошо подходит для создания RESTful API. Его простота и поддержка HTTP-методов делают его популярным выбором для создания конечных точек API.
Подходит ли Flask для крупномасштабных веб-приложений?
Flask может использоваться для крупномасштабных приложений, но может потребовать больше ручной настройки и интеграции дополнительных компонентов по сравнению с полнофункциональными фреймворками, такими как Django.