Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Запросы Python: Веб-разработка (Flask)

Маршрутизатор уже берёт на себя часть обработки запросов — выбирает, какой обработчик вызвать в зависимости от пути. Но запросы характеризуются не только путями, но и методами (methods), и параметрами (parameters). При написании web-приложений нужно уметь работать с этими (и многими другими) свойствами запросов.

Все свойства текущего запроса можно получить в теле обработчика с помощью "магического" глобального объекта request:

from flask import request

@app.route('/echo/')
def echo():
    print(request.path)  # => '/echo/'
    return request.data

Методы HTTP

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

В коде обработчика вы всегда можете обратиться к request.method и выбрать, как вы хотите обрабатывать каждый метод. Но часто гораздо удобнее иметь отдельные обработчики для разных методов. Маршрутизатор Flask даёт такую возможность:

@app.route('/users/', methods=['GET'])
def get_users():
    # ...

@app.route('/users/', methods=['POST', 'PUT'])
def post_users():
    # ...

Параметры

Запросы могут быть параметризованы с помощью query string или с помощью form data. К первым доступ можно получить с помощью атрибута request.args:

user_id = request.args.get('user', None)

За вторые отвечает атрибут request.form:

username = request.form['username']
password = request.form['password']

И args, и form внешне похожи на словари, но они неизменяемы. А ещё позволяют иметь несколько значений для каждого ключа. Так, для запроса с параметрами ?a=1&a=2 вы можете получить первое значение параметра 'a', обратившись напрямую по ключу, весь же набор значений даст метод getlist. Пример:

request.args['a']          # '1'
request.args.getlist('a')  # ['1', '2']

Другие свойства запросов

Я не описал работу с заголовками и cookies, не рассказал про MIME-types и другие атрибуты настоящих HTTP-запросов потому, что документация покрывает эти темы хорошо, да и работать с этими свойствами запросов приходится реже.

Полный перечень свойств объекта request вы можете посмотреть в документации.

Магичность объекта request

Вы могли подумать, как же request, который мы импортируем из общедоступного модуля — то есть тоже общедоступный объект, может хранить данные конкретного запроса? Это от нас скрывает машинерия фреймворка. Вам нужно лишь помнить, что запрос всегда для каждого обработчика "свой" и данные разных запросов не перемешиваются, даже если одновременно происходит обработка нескольких запросов! Если же вы очень уж заинтересуетесь тем, как такая магия реализована в коде, то я, опять же, посоветую почитать документацию Flask. Но предупреждаю, это непростая тема :)

Задание

  1. Добавьте в ваше приложение маршрут /args.
  2. Реализуйте обработчик для этого маршрута, возвращающий HTML-страницу c таблицей.
  3. Выводите в таблицу имена и значения параметров из query string. Помните о том, что каждый параметр может иметь несколько значений.

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

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

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»