Безопасна ли промежуточная среда Django?
Безопасна ли промежуточная среда Django? Могу ли я сделать что-то вроде этого,
class ThreadsafeTestMiddleware(object):
def process_request(self, request):
self.thread_safe_variable = some_dynamic_value_from_request
def process_response(self, request, response):
# will self.thread_safe_variable always equal to some_dynamic_value_from_request?
Ответы
Ответ 1
Почему бы не привязать переменную к объекту запроса, например:
class ThreadsafeTestMiddleware(object):
def process_request(self, request):
request.thread_safe_variable = some_dynamic_value_from_request
def process_response(self, request, response):
#... do something with request.thread_safe_variable here ...
Ответ 2
Нет, очень определенно нет. Я пишу об этом вопросе здесь - результат заключается в том, что сохранение состояния в классе промежуточного программного обеспечения является очень плохим.
Как указывает Стив, решение состоит в том, чтобы добавить его в запрос.
Ответ 3
Если вы используете mod_wsgi в режиме демона с несколькими потоками, ни один из этих параметров не будет работать.
WSGIDaemonProcess domain.com user = www-data group = www-data threads = 2
Это сложно, потому что он будет работать с сервером django dev (single, local thread) и давать непредсказуемые результаты в производстве в зависимости от вашего жизненного цикла.
Ни настройка атрибута запроса, ни манипуляция сеансом не являются потоковыми в mod_wsgi. Поскольку process_response принимает запрос в качестве аргумента, вы должны выполнить всю свою логику в этой функции.
class ThreadsafeTestMiddleware(object):
def process_response(self, request, response):
thread_safe_variable = request.some_dynamic_value_from_request