Что делает этот метод?

На просторах форума встретил такой кусок кода, как абстрактный пример. Что такое dispatch, какую полезную нагрузку должна нести функция, как её правильно писать и что есть смежного в этой сфере?

Спасибо

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
    return super().dispatch(request, *args, **kwargs)

Ответы (2 шт):

Автор решения: nomnoms12

Это метод, в который приходит "сырой" 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.

→ Ссылка