Метод dispatch_request
Метод dispatch_request применяется к классу
MethodView и вызывается Flask при поступлении
запроса. Он определяет HTTP-метод запроса и вызывает
соответствующий метод класса: get, post,
put, patch или delete.
Первым параметром передаётся переменная часть URL,
если она есть в маршруте.
По умолчанию dispatch_request возвращает
результат вызванного метода или ошибку 405, если
подходящий метод не найден. Метод можно переопределить,
чтобы добавить свою логику выбора обработчика.
Синтаксис
class MyView(MethodView):
def dispatch_request(self, *args, **kwargs):
return super().dispatch_request(*args, **kwargs)
Пример
Давайте создадим класс-представление и повесим его
на адрес '/user':
from flask import Flask
from flask.views import MethodView
app = Flask(__name__)
class UserView(MethodView):
def get(self):
return 'user get'
def post(self):
return 'user post'
app.add_url_rule('/user', view_func=UserView.as_view('user'))
При GET-запросе на адрес '/user' метод
dispatch_request вызовет метод get
и вернёт результат:
user get
Пример
Давайте примем параметр name из URL через
метод класса:
from flask import Flask
from flask.views import MethodView
app = Flask(__name__)
class UserView(MethodView):
def get(self, name):
return name
app.add_url_rule('/user/<name>', view_func=UserView.as_view('user'))
Метод dispatch_request передаст параметр
name в метод get. Результат для
адреса '/user/abcde':
abcde
Пример
Давайте переопределим dispatch_request,
чтобы вернуть ответ для всех методов сразу:
from flask import Flask
from flask.views import MethodView
app = Flask(__name__)
class UserView(MethodView):
def dispatch_request(self, *args, **kwargs):
return 'dispatch ' + flask.request.method
app.add_url_rule('/user', view_func=UserView.as_view('user'))
Результат для GET-запроса на адрес '/user':
dispatch GET
Смотрите также
-
класс
MethodView,
который создаёт представление на основе класса -
метод
as_view,
который превращает класс в функцию-обработчик -
метод
get,
который обрабатывает GET-запрос -
метод
post,
который обрабатывает POST-запрос