Метод dispatch_request
Метод dispatch_request применяется к классу
View и вызывается Flask при обработке
запроса. Первым параметром передаётся объект
запроса, а метод возвращает результат того
обработчика, который соответствует HTTP-методу
запроса. По умолчанию он ищет метод с именем
HTTP-метода в нижнем регистре: get,
post, put, patch,
delete и так далее. Если подходящий метод
не найден, возвращается ошибка 405.
Метод можно переопределить в своём классе-наследнике, чтобы изменить логику выбора обработчика.
Синтаксис
def dispatch_request(self):
...
Пример
Давайте создадим класс-наследник View
с методами get и post и
зарегистрируем его как представление:
from flask import Flask
from flask.views import View
app = Flask(__name__)
class MyView(View):
def get(self):
return 'hello'
def post(self):
return 'article'
app.add_url_rule('/page/', view_func=MyView.as_view('page'))
При GET-запросе на адрес /page/ метод
dispatch_request найдёт метод get
и вернёт его результат. Результат выполнения кода:
hello
При POST-запросе на тот же адрес будет вызван
метод post. Результат выполнения кода:
Пример
Давайте переопределим dispatch_request,
чтобы обрабатывать все методы одним способом:
from flask import Flask, request
from flask.views import View
app = Flask(__name__)
class MyView(View):
def dispatch_request(self):
return 'method: ' + request.method
app.add_url_rule('/page/', view_func=MyView.as_view('page'))
Теперь любой запрос обрабатывается одинаково. Результат выполнения кода для GET-запроса:
method: GET
Результат выполнения кода для POST-запроса:
method: POST