РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
389 of 643 menu

Исключение MethodNotAllowed

Исключение MethodNotAllowed вызывается Flask, когда клиент отправляет запрос по существующему URL, но с HTTP-методом, который не указан в параметре methods декоратора route. По умолчанию маршрут принимает только GET-запросы, поэтому попытка отправить POST или PUT на такой маршрут приводит к этому исключению. Наследуется от класса HTTPException и имеет код ответа 405.

Синтаксис

from flask import Flask from werkzeug.exceptions import MethodNotAllowed app = Flask(__name__) @app.errorhandler(MethodNotAllowed) def handle_method_not_allowed(error): return 'method not allowed', 405

Исключение можно импортировать из werkzeug.exceptions или из flask. Оно доступно через атрибут code со значением 405, а также через атрибуты name и description.

Пример

Давайте создадим маршрут, который принимает только GET-запросы, и попробуем отправить на него POST:

from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): return 'hello'

Обращение методом POST к адресу / вызовет исключение MethodNotAllowed и вернёт ответ с кодом 405. Результат ответа:

<+html+> 405 Method Not Allowed <-html+>

Пример

Давайте явно разрешим метод POST и обработаем исключение для остальных методов:

from flask import Flask from werkzeug.exceptions import MethodNotAllowed app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): return 'hello' @app.errorhandler(MethodNotAllowed) def handle_method_not_allowed(error): return 'method not allowed', 405

Теперь GET и POST обрабатываются функцией index, а запрос методом DELETE вызовет обработчик ошибки. Результат ответа для DELETE:

<+html+> method not allowed <-html+>

Пример

Давайте получим информацию об исключении через его атрибуты:

from flask import Flask from werkzeug.exceptions import MethodNotAllowed app = Flask(__name__) @app.route('/') def index(): return 'hello' @app.errorhandler(MethodNotAllowed) def handle_method_not_allowed(error): res = { 'code': error.code, 'name': error.name, 'description': error.description } return res, 405

Результат ответа для POST-запроса:

{'code': 405, 'name': 'Method Not Allowed', 'description': 'The method is not allowed for the requested URL.'}

Смотрите также

  • класс HTTPException,
    базовый класс всех HTTP-исключений Flask
  • исключение NotFound,
    которое возникает при обращении к несуществующему URL
  • атрибут code,
    который хранит HTTP-код исключения
  • атрибут description,
    который хранит текстовое описание исключения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить