Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

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

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

New Documentation

Сайты, на которых вы смотрите видео, читаете новости или просто общаетесь, реализуют клиент-серверную архитектуру. Клиент, например браузер, отправляет запрос серверу, а тот, исходя от полученного запроса, отправляет клиенту ответ, обычно 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: как в виде запросов GET, так и POST. Но, необходимо помнить, что мы не рассмотрели важный аспект обработки — безопасность сервера. При работе с данными от клиента нужно всегда их проверять на наличие ошибок или вредоносных элементов. Профилактика — это лучший способ уберечь сервер от нежелательных последствий. 

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону