Начало работы с Flask, микрофреймворком Python

Сократите HTML в Flask с помощью Flask-Minify Изучение

В этой статье мы представим Flask, популярный микрофреймворк для Python, который предлагает альтернативу гиганту Django.

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

Что такое Flask?

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

Он построен на основе набора инструментов Werkzeug WSGI, который предоставляет функции веб-сервера, необходимые для обработки запросов и ответов, и механизма шаблонов Jinja2, который дает Flask возможность обрабатывать шаблоны HTML, позволяя разработчикам создавать динамические веб-приложения.

Вот некоторые из ключевых особенностей Flask, которые делают его отличным фреймворком для работы:

  • Он имеет простой API для создания веб-маршрутов и обработки запросов.
  • Механизм шаблонов Jinja предлагает поддержку шаблонов HTML, что позволяет разработчикам легко создавать веб-страницы.
  • Он легко расширяется благодаря поддержке сторонних расширений, поэтому разработчик может устанавливать расширения в зависимости от потребностей своего проекта.
  • Он поставляется в комплекте с сервером разработки, который упрощает тестирование и отладку приложений.

В целом, Flask предоставляет мощную, гибкую, но простую среду для создания веб-приложений. Это хороший выбор как для новых, так и для опытных веб-разработчиков, и это одна из самых популярных веб-платформ в экосистеме веб-разработки Python.

Преимущества Flask

Давайте теперь более подробно рассмотрим некоторые преимущества использования Flask в разработке.

Читайте также:  4 тенденции модернизации системы онлайн-бронирования в 2021 году

Простота. Философия дизайна Flask подчеркивает простоту, что облегчает понимание и использование разработчиками любого уровня. Это также означает, что у разработчиков минимальная кривая обучения, поскольку им нужно изучить лишь несколько концепций и API, чтобы начать создавать веб-приложения.

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

Документация. Документация Flask очень всеобъемлющая, с хорошим охватом тем от базовых до продвинутых, что позволяет разработчикам очень легко научиться использовать фреймворк.

Совместимость. Flask совместим с широким спектром версий Python, что упрощает его использование с существующими кодовыми базами Python. Он также поддерживает несколько веб-серверов, что упрощает его развертывание на различных хостинговых платформах.

Быстрое развитие. Простота и гибкость Flask уменьшают количество шаблонов, необходимых для настройки приложения, что позволяет разработчикам быстро приступить к работе.

В Интернете Flask используется множеством интересных способов. Вот несколько примечательных примеров:

  • PgAdmin. Интерфейс администратора Postgres работает на экземпляре Flask, предоставляя разработчикам интерфейс, с помощью которого они могут управлять своими базами данных Postgres.
  • Twilio. Это коммуникационная платформа, которая использует Flask в нескольких своих API.
  • Pinterest. Это приложение для обмена фотографиями использует Flask в стеке веб-разработки, что позволяет его команде легко создавать некоторые пользовательские функции и интеграции.

Когда использовать Flask

Простота и удобство использования Flask делают его отличным выбором для широкого круга веб-проектов:

  • Prototyping. Простота использования и гибкость делают его отличным выбором для быстрого создания прототипов, позволяя разработчикам быстро создавать и тестировать новые функции.
  • Создание RESTful API. Его собственный простой API упрощает создание и обработку HTTP-запросов.
  • Приложения электронной коммерции. Он хорошо работает для создания онлайн-рынков и платформ электронной коммерции.
  • Finance. Это полезно для создания финансовых приложений с управлением учетными записями, обработкой транзакций и отслеживанием инвестиций.
  • AI. Он предлагает полезный и простой способ создания и развертывания моделей обучения ИИ.

Когда не следует использовать Flask

Несмотря на то, что Flask является отличным фреймворком и имеет ряд преимуществ и замечательных функций, бывают ситуации, когда эти функции работают против него. Давайте рассмотрим некоторые проекты, которые лучше подходят для других типов фреймворков.

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

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

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

Настройка среды разработки Flask

Давайте теперь посмотрим, как начать работу с Flask, от настройки среды разработки до установки и, наконец, запуска минимального приложения.

Prerequisites

Python должен быть установлен на компьютере для разработки. Вот инструкции для этого (хотя, возможно, он у нас уже установлен ).

Создайте виртуальную среду

Виртуальная среда — это изолированная среда Python, в которой мы можем устанавливать пакеты для данного проекта, не затрагивая глобальную установку Python. (Дальнейшее обсуждение того, почему виртуальные среды полезны.) Существуют различные пакеты для создания виртуальных сред в Python, такие как virtualenv, venv или 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 ( /about). Когда приложение получает запрос aboutURL-адреса, Flask вызывает about()функцию, которая возвращает строку «Это страница о нас».

Пока что, несмотря на то, что эти примеры возвращают разные страницы, все они просто используют GETHTTP-запрос. Чтобы иметь возможность обрабатывать любой конкретный запрос, мы можем указать метод HTTP в качестве необязательного аргумента для декоратора route().

Рассмотрим пример запроса PUT:

from flask import Flask, request

app = Flask(__name__)

@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    # get the user data from the request body
    data = request.get_json()
    # do something with the user data, such as update the user in the database
    # ...
    # return a response indicating success or failure
    return {'message': f'User {user_id} updated successfully'}, 200

В этом примере мы определяем маршрут, который обрабатывает PUTзапрос на обновление сведений о пользователе с учетом его user_id. Мы используем в маршруте, чтобы указать, что идентификатор пользователя должен быть целым числом.

В update_user()функции мы получаем пользовательские данные из тела запроса с помощью метода request.get_json(). Мы делаем что-то с пользовательскими данными, например, обновляем пользователя в базе данных, а затем возвращаем ответ, указывающий на успех или неудачу, вместе с кодом состояния HTTP (в данном случае, чтобы 200показать успех).

В целом маршрутизация позволяет Flask обрабатывать различные типы запросов и позволяет нашему приложению обрабатывать данные и действовать с ними по-разному, в зависимости от URL-адреса, который посещает пользователь.

Flask Forms и Validation

Помимо отображения данных для пользователей, шаблоны 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
        # do something with the form data
    return render_template('login.html', form=form)

В приведенном выше примере у нас есть loginпредставление, которое принимает два метода HTTP ( GETи POST), поэтому, когда пользователи обращаются к URL-адресу из браузера, он LoginFormотображается как HTML-форма с использованием render_templateметода, и когда пользователь отправляет форму, мы проверяем, была ли форма действителен при использовании validate_on_submitметода. Если форма действительна, мы получаем доступ к электронной почте и паролю.

Форма 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вместе с их метками, а также кнопку отправки с текстом «Войти». Поле 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='john@example.com')
db.session.add(user)
db.session.commit()

С расширениями Flask наше приложение может иметь больше функциональных возможностей, чем обычно с базовой реализацией Flask.

Заключение

В этой статье мы представили Flask, легкий и гибкий веб-фреймворк для Python. Мы обсудили преимущества использования Flask для веб-разработки, в том числе его простоту, гибкость и простоту использования. Мы также рассмотрели, как настроить среду разработки, создать маршруты, использовать шаблоны, обрабатывать формы и использовать расширения, такие как Flask-SQLAlchemy.

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

Оцените статью
bestprogrammer.ru
Добавить комментарий