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

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

Сервер призван отвечать на запросы, в этом его суть. Но разные запросы могут ожидать ответа в разных форматах. Кроме того, ответ сервера, будучи правильным HTTP response, должен сообщать статус. Более того, кроме статуса и тела, ответ часто содержит ещё и заголовки, обозначающие тип контента, добавляющие cookies и тому подобное. К счастью, Flask максимально упрощает работу Web-разработчика и в этом аспекте!

Простейшие виды ответов

Flask достаточно умён, чтобы догадаться о формате ответа по возвращаемому нами из обработчика значению. Вот три обработчика:

@app.route('/return/text')
def text():
    return "text"

@app.route('/return/json')
def json():
    return {'json': 42}

@app.route('/return/html')
def html():
    return render_template('html.html')

Если вы запустите сервер, содержащий эти обработчики, то при запросе по соответствующим путям, вы получите:

  • text/html в ответ на запросы к /return/text и /return/html
  • application/json в ответ на запрос к /return/json.

Такое поведение можно понять. Web-сервер обычно возвращает либо HTML-страницы, либо данные в виде JSON (в ответ на запросы от тех же самых страниц, например). Так строки становятся text/html, а словари — application/json.

Если вы вернёте вместе с телом (в виде кортежа-пары) ещё и число, то клиент получит соответствующий код ответа:

@app.route('/not_found')
def not_found():
    return 'Oops!', 404

Кстати, обработчики типичных ошибок вроде "страница не найдена" во Flask выглядят, как обработчики запросов. С той лишь разницей, что обработчики ошибок получают в качестве аргумента объект ошибки. Вот так можно было бы оформить "Страницу 404":

@app.errorhandler(404)
def not_found(error):
    return 'Oops!', 404

Явное задание заголовков и других параметров ответа

В тех случаях, когда вам не достаточно тела и статуса ответа, вы можете использовать функцию make_response(), которая принимает те же тело и опциональный статус и возвращает объект ответа (flask.Response). Объект ответа можно модифицировать разными способами и затем вернуть из обработчика. Пример:

from flask import make_response

@app.route('/foo')
def foo():
    response = make_response('foo')
    # устанавливаем заголовок
    response.headers['X-Parachutes'] = 'parachutes are cool'
    # меняем тип ответа
    response.mimetype = 'text/plain'
    # задаём статус
    response.status_code = 418
    # устанавливаем cookie
    response.set_cookie('foo', 'bar')
    return response

Задание

  1. Добавьте обработчик в ваше приложение (путь выберите сами).
  2. Сделайте так, чтобы обработчик возвращал параметры запроса в виде JSON-объекта. Добейтесь того, чтобы ключи соответствовали именам параметров, а значения — спискам значений для каждого параметра (помним, в запросе параметр может встречаться несколько раз!).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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