Как вернуть HTTP статус 201 в Flask: решение ошибки

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

HTTP-статус 201 передает информацию о успешном создании ресурса в REST API. Чтобы вернуть этот код во Flask, следует добавить его параллельно с результатом функции:

Python
Скопировать код
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/create', methods=['POST'])
def create_resource():
    # Создается ресурс
    return jsonify({'message': 'Ресурс успешно создан'}), 201

Такой подход ясно указывает на успешное создание нового ресурса.

Кинга Идем в IT: пошаговый план для смены профессии

Возврат ответов разного формата

Flask предоставляет возможность возвращать ответы не только в формате JSON. Для передачи HTML-содержимого можно использовать следующий код:

Python
Скопировать код
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/create', methods=['POST'])
def create_html_resource():
    # Производится рендеринг страницы
    response = render_template('created.html')
    return response, 201, {'ContentType':'text/html'}

Такой код возвращает HTML-страницу, сопровождаемую HTTP-статусом 201 и MIME-типом text/html.

Пользовательские заголовки и использование стандартных статус-кодов

Чтобы добавить пользовательские заголовки в ответ, достаточно вставить их в кортеж:

Python
Скопировать код
return data, status_code, headers

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

Визуализация

Можно провести аналогию, где сервер Flask представлен в роли повара, а статус 201 – вашим заказом:

Markdown
Скопировать код
Клиент (🧑‍💻): "Я хотел бы заказать блюдо под номером 201."
Повар (Flask 👨‍🍳): "Сейчас приготовим!"

Повар на кухне (получение обратной связи 👨‍🍳🥘):
@app.route('/create', methods=['POST'])
def create_resource():
    # Немного кодирования... и вот блюдо готово!
    
    return "Ваш заказ номер 201 готов!", 201  # 🍽✨

Итак, код статуса 201 объявляет: "Заказ выполнен" 🍽✨.

Необходимость явного создания исключений? Забудьте об этом.

С помощью кода статуса 201, указывающего на успешное выполнение, нет важности генерировать исключения; они обычно характерны для ошибок с кодами 4xx и 5xx.

Включение JSON-данных в ответ

Ответ с кодом статуса 201 может содержать информацию о созданном ресурсе в формате JSON:

Python
Скопировать код
return jsonify({'id': resource_id, 'message': 'Ресурс создан успешно.'}), 201

Такие данные, как ID или URL нового ресурса, помогают облегчить взаимодействие с вашим API.

Оформление вашего ответа

Для гарантированной правильности ответов:

  1. Проведите тестирование для проверки структуры и содержания ответа.
  2. Используйте декораторы или промежуточное ПО для централизованного форматирования ответов.

Это способствует универсальности в коммуникации с клиентами вашего приложения.

Обработка ошибок

Метод abort используется для прерывания обработки и возвращения кода ошибки в случае, если в процессе создания ресурса возникли проблемы. Однако этот метод не требуется при успешной передаче статуса 201.

Полезные материалы

  1. Quickstart — Flask Documentation (2.2.x) — Введение в механизм ответов сервера на Flask.
  2. HTTP response status codes – HTTP | MDN — HTTP-статусы в справочном руководстве Mozilla.
  3. API — Flask Documentation (2.2.x) — Информация о функции make_response в Flask.
  4. HTTP Status Codes – REST API Tutorial — Обзор лучших практик использования HTTP-статусов в REST API.
  5. Python REST APIs With Flask, Connexion, and SQLAlchemy – Part 1 – Real Python — Создание REST API с помощью Flask: руководство от Real Python.
  6. python – Return JSON response from Flask view – Stack Overflow — Обсуждение возврата JSON-ответов в Flask на форуме Stack Overflow.