Django Class Based Views: считается ли неправильным или плохим расширение метода отправки? - PullRequest
0 голосов
/ 25 апреля 2018

В нашей кодовой базе django мы расширяем метод отправки по следующим причинам:

  1. Чтобы установить переменные, которые являются общими для обоих методов GET / POST.
  2. Чтобы ограничить доступ пользователя (Для этого создан отдельный миксин, который просто расширяет диспетчеризацию и выполняет проверки)

Если его считают плохим, почему это так и какова альтернатива?

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете сделать это, если переопределение является вашим единственным выбором для получения необходимой вам функциональности.

Например, django-rest-framework переопределяет метод dispatch для предоставления таких функций, как authentication, permission, throttling.

См. здесь .

    def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        request = self.initialize_request(request, *args, **kwargs)
        self.request = request
        self.headers = self.default_response_headers  # deprecate?

        try:
            self.initial(request, *args, **kwargs)

            # Get the appropriate handler method
            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

            response = handler(request, *args, **kwargs)

        except Exception as exc:
            response = self.handle_exception(exc)

        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response
...