Top.Mail.Ru
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Обработка данных в Flask

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
17 мая 2022 г.
4148
8 минут чтения
Средний рейтинг статьи: 5

Сайты, на которых вы смотрите видео, читаете новости или просто общаетесь, реализуют клиент-серверную архитектуру. Клиент, например браузер, отправляет запрос серверу, а тот, исходя от полученного запроса, отправляет клиенту ответ, обычно html-документ. 

Если взглянуть «под капот» сайтов, то окажется, что программная реализация работы с запросами подвержена одной общей логике:

  1. Принять запрос.
  2. Выбрать обработчика запроса.
  3. Выполнить обработчика.
  4. Отправить клиенту ответ.

Фреймворк — это один из инструментов разработчика для реализации логики приложения. 

Обработка Данных В Flask (1)

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

Начало работы

Мы будем использовать PyCharm + pipenv на Windows 10. В интернете достаточно руководств для установки такого комплекта на другие операционные системы. А здесь расскажем, как установить его на Win 10.

Установите Python:

Переходим на официальный сайт www.python.org/downloads/, выбираем версию Python под нашу операционную систему, скачиваем и устанавливаем, следуя всем инструкциям инсталлятора.

Установите pipenv:

Pipenv — это пакет управления виртуальным окружением python. Для того, чтобы скачать его открываем командную строку Windows и выполняем вот эту команду:

  
py -m pip install pipenv

Установите PyCharm

PyCharm — это среда разработки для языка программирования Python. Чтобы её установить, заходим на официальный сайт www.jetbrains.com/ru-ru/pycharm/, выбираем версию Community (или Professional, если вы готовы оформить подписку), скачиваем и устанавливаем, также следуя инструкциям установщика.

Создание проекта

В левом верхнем углу нажимаем «File» -> «New Project»:

Image4

  • 1 — каталог будущего  проекта;
  • 2 — выбор пакета окружения;
  • 3 — путь к базовому интерпретатору Python;
  • 4 — путь к исполняемому файлу pipenv;

После того, как настроили и указали все необходимые параметры, нажимаем «Create».

Важно! Необходимо, чтобы в путях не было каталогов с названиями на кириллице — это может привести к ошибке.

Установите Flask

После создания проекта нажимаем на кнопку “Terminal” в нижней части среды разработки и выполняем эту команду:

  
pip install flask

Если вы выполнили правильно все шаги до этого момента, то начнется загрузка Flask.

При возникновении ошибки «Выполнение сценариев в этой системе отключено» необходимо запустить терминал PowerShell от имени администратора и выполнить в нём команду Set-ExecutionPolicy RemoteSigned. После чего ввести [A].

Работа с URL

После установки необходимых компонентов можно перейти к непосредственному с взаимодействию с фреймворком. Сначала импортируйте Flask:

  
from flask import Flask

Напишем небольшое приложение Flask, на основе которого продемонстрируем работу с URL запросами:

  
from flask import Flask app = Flask(__name__) @app.route("/timeweb") def timeweb():    return "Это страница /timeweb" @app.route("/blog") def blog():    return "Это страница /blog" @app.route("/cloud") def cloud():    return "Это страница /cloud" if __name__ == "__main__":    app.run()

Прокомментируем подробнее, что делает этот код:

  • В первую очередь мы импортируем Flask;
  • Затем мы создаем экземпляр app класса Flask;
  • Теперь описываем декоратор .route для каждого отдельного URL: при обработке того или иного URL будет вызываться соответствующая функция;
  • Для запуска приложения используем .run();

Теперь запустим его. В консоли мы можем найти адрес нашего локального сайта:

Image8

Перейдем по нему и… ничего не получим:

Image6

Такой результат мы получили из-за того, что не описали декоратор для URL-запроса, содержащего только корневой путь «/». Теперь попробуем перейти по другим URL-адресам, для которых описали необходимые декораторы и функции:

Image3

Также при каждом подключении в консоль выводится информация о нём:

Image2

В этом случае мы использовали и обрабатывали GET-запрос — получали информацию из URL. Но обработка данных входящих запросов в Flask этим не ограничивается. Теперь попробуем получить из URL-запроса перечень различной информации.

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой

GET

С помощью URL-запроса можно передавать серверу различные аргументы (они же query-параметры). Наверняка вам приходилось видеть в запросах знак вопроса. Знак вопроса в URL-запросе означает, что после него идут аргументы. Предположим, у нас есть такой запрос:

  
timeweb.com/blog?framework=flask&language=python&version=3.10

В этом запросе переданы пары ключ-значение через амперсанд. Если разобрать этот запрос на части, то мы получим такие пары:

  
framework=flask language=python version=3.10

Напишем функцию get_example(), которая произведет извлечение данных из запроса в Flask Python, а в качестве ответа будет ответа сообщение с полученным данными:

  
from flask import request @app.route("/get_example") def get_example():    framework = request.args.get('framework')    language = request.args.get('language')    version = request.args.get('version')    return "language = {};framework = {}; version = {} ".format(language, framework, version)

Что делает этот код:

  1. Импортирует класс request и его методы;
  2. Описывает декоратор для URL /get_example;
  3. Разбивает запрос на значения и присваивает их соответствующим ключам;
  4. Отправляет в качестве ответа три пары ключ-значение;

Теперь перейдем по этому адресу http://127.0.0.1:5000/get_example?language=python&framework=flask&version=3.10:

Image9

Как видим, код правильно обработал запрос.

POST

По умолчанию .route() обрабатывает только GET-запросы. В flask можно обрабатывать и POST-запросы. Добавим в наше приложение flask формы авторизации логин-пароль:

  
@app.route('/authorization', methods=['GET', 'POST']) def authorization():    if request.method == 'POST':        Login = request.form.get('Login')        Password = request.form.get('Password')        if Login=="admin" and Password=="admin":            return "Correct"        else:            return "Incorrect"    return '''              <form method="POST">                  <div><label>Login: <input type="text" name="Login"></label></div>                  <div><label>Password: <input type="text" name="Password"></label></div>                  <input type="submit" value="Enter">            </form>'''

Подробно распишем работу этого декоратора в приложении на Flask:

  • Указываем в аргументах декоратора, что обработка запросов связана как с GET, так и с POST;
  • Сначала срабатывает запрос GET (последний return): выводим форму для логина и пароля;
  • После ввода в поля логина и пароля декоратор получает запрос POST с данными и обрабатывает их;
  • Если логин и пароль верные, то возвращаем сообщение «Correct»;
  • Если логин и пароль неверные, то возвращаем сообщение «Incorrect»;

Перейдем по 127.0.0.1:5000/authorization и проверим работу декоратора:

Image7

При корректных данных:

Image5

И при неправильных:

Image1

Вот полный код нашего приложения:

  
from flask import Flask app = Flask(__name__) @app.route("/timeweb") def timeweb():    return "Это страница /timeweb" @app.route("/blog") def blog():    return "Это страница /blog" @app.route("/cloud") def cloud():    return "Это страница /cloud" from flask import request @app.route("/get_example") def get_example():    framework = request.args.get('framework')    language = request.args.get('language')    version = request.args.get('version')    return "language = {};framework = {}; version = {} ".format(language, framework, version) @app.route('/authorization', methods=['GET', 'POST']) def authorization():    if request.method == 'POST':        Login = request.form.get('Login')        Password = request.form.get('Password')        if Login=="admin" and Password=="admin":            return "Correct"        else:            return "Incorrect"    return '''              <form method="POST">                  <div><label>Login: <input type="text" name="Login"></label></div>                  <div><label>Password: <input type="text" name="Password"></label></div>                  <input type="submit" value="Enter">              </form>''' if __name__ == "__main__":    app.run()

Размещайте свои Flask-приложения
в облаке Timeweb Cloud

  • Premium 3.3 ГГц
  • Dedicated CPU
Москва
Cloud MSK 15

300 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

550 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
17 мая 2022 г.
4148
8 минут чтения
Средний рейтинг статьи: 5
  • Ваш комментарий
  • Предпросмотр
Пока нет комментариев
Произошла неизвестная ошибка
Мы используем на сайте куки.
В интернете без них никак