Класс MethodView
Класс MethodView применяется для создания
классов-представлений, в которых каждый HTTP-метод
обрабатывается отдельным методом класса.
Наследник MethodView определяет методы get,
post, put, patch, delete и другие.
Затем класс регистрируется через
add_url_rule
с помощью метода as_view, который превращает
класс в функцию-обработчик.
Синтаксис
from flask.views import MethodView
class MyView(MethodView):
def get(self):
...
def post(self):
...
app.add_url_rule('/path/', view_func=MyView.as_view('name'))
Пример
Давайте создадим класс-представление с методами
get и post и зарегистрируем его
по адресу '/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':
user get
Результат выполнения POST-запроса к адресу
'/user':
user post
Пример
Давайте передадим параметр 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'))
Результат выполнения кода для адреса
'/user/abcde':
abcde
Пример
Давайте укажем имя эндпоинта и разрешённые HTTP-методы при регистрации класса-представления:
from flask import Flask
from flask.views import MethodView
app = Flask(__name__)
class ArticleView(MethodView):
def get(self):
return 'article get'
def delete(self):
return 'article delete'
app.add_url_rule(
'/article',
view_func=ArticleView.as_view('article'),
methods=['GET', 'DELETE']
)
Результат выполнения DELETE-запроса к адресу
'/article':
article delete
Смотрите также
-
метод
as_view,
который превращает класс в функцию-обработчик -
метод
dispatch_request,
который выбирает метод класса по HTTP-методу -
класс
View,
базовый класс для создания представлений -
метод
init_every_request,
который определяет создание экземпляра на каждый запрос