Подтвердить что ты не робот

Безопасна ли промежуточная среда 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?
4b9b3361

Ответ 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