Что делает этот метод?
На просторах форума встретил такой кусок кода, как абстрактный пример. Что такое dispatch, какую полезную нагрузку должна нести функция, как её правильно писать и что есть смежного в этой сфере?
Спасибо
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
Ответы (2 шт):
Это метод, в который приходит "сырой" HTTP пакет.
Именно метод dispatch отвечает за то, в какой метод далее передать пакет: GET в get, POST в post и т. д.
Код:
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
В Вашем случае, этот метод переопределяют, чтобы сделать доступ к представлению (всем его методам) только залогиненым пользователям с помощью декоратора
login_required.
Метод dispatch - это метод, который отвечает за выбор (и вызов) метода обработки запроса:
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
В вашем конкретном случае он переопределен только с целью проверки пользователя на авторизацию с помощью декоратора login_required, который в случае, если пользователь не авторизован , переадресовывает его на страницу авторизации.
Адрес для авторизации должен быть задан в settings.py константой LOGIN_URL.