Исключение 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. Результат ответа:
Пример
Давайте явно разрешим метод 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:
Пример
Давайте получим информацию об исключении через его атрибуты:
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,
который хранит текстовое описание исключения