Как в Django получить объект request из любой части кода? Объект request передаётся в view.py.
Что делать когда нам нужно получить доступ к этому объекту например в моделе, в каком-то своём модуле или ещё где-то.
При этом не хочется всегда передавать это объект в качестве аргумента.
Хочется иметь гарантированный прямой доступ.
Возможно в Джанго организован паттер Registry, где всегда можно обраться к этому объекту?
Или есть какой-то другой способ добраться к нему.
А если организовавывать самостоятельно паттерн Registry в какой части когда следует проводить регистрацию обекта request в наш реестр?

21 Авг 2019 в 07:10
216 +1
1
Ответы
1

В Django нет прямого способа получить объект request из любой части кода без его передачи в качестве аргумента. Однако, вы можете использовать RequestContextMiddleware, чтобы иметь доступ к объекту request в любом месте view.

Чтобы создать "Registry" паттерн для доступа к объекту request, вы можете создать класс (например, RequestRegistry), который будет хранить объект request и предоставлять методы для его доступа.

Пример:

class RequestRegistry:
_request = None
@classmethod
def register_request(cls, request):
cls._request = request
@classmethod
def get_request(cls):
return cls._request

Вы можете вызвать метод register_request() в вашем middleware, чтобы зарегистрировать объект request:

class CustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
RequestRegistry.register_request(request)
return self.get_response(request)

Теперь вы можете получить доступ к объекту request в любом месте вашего кода, используя метод get_request() класса RequestRegistry:

request = RequestRegistry.get_request()

Обратите внимание, что использование такого "Registry" паттерна может быть не самым чистым способом организации кода и может привести к сложностям при отладке и тестировании. Поэтому рекомендуется передавать объект request в качестве аргумента там, где это возможно, вместо использования глобального доступа к нему.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир