Django вы можете получать сигналы в промежуточном программном обеспечении или изменять объект ответа глобально? - PullRequest
0 голосов
/ 27 июня 2010

Я хотел бы вызвать функцию в моем представлении или любой другой модуль и попросить ее обновить тело ответа.

Вначале я думал о реализации промежуточного программного обеспечения process_response для обновления тела ответа и настройки обратного вызова, который принимает сигналы, отправленные в моих вызовах функций, но когда я пытаюсь, приемник никогда не срабатывает (я тестировал сингал / приемник вне класса / модуля промежуточного программного обеспечения, и он работает нормально.

Пример:

# in module that defines the signal
module.signal.send(msg='this is a message to append on the response body')

# in view or model
signal.connect(callback)

# in middleware.py
def callback(self, sender, *kwargs):
    self.body_text = kwargs.pop('msg')

def process_response(self, request, response):
    response.body = response.body + self.body_text
    return response

1 Ответ

0 голосов
/ 30 июня 2010

Если вы действительно хотите это сделать, вы можете использовать request в качестве промежуточного звена.

Используйте сигналы запроса «начало / окончание» для регистрации / отмены регистрации нового слушателя, который добавит этот текст к некоторому атрибуту.вашего объекта запроса.

Затем в промежуточном программном обеспечении process_response вам просто нужно проверить этот атрибут.Вы также хотели бы быть осторожными относительно статуса ответа, хотя.В действительности нет никакого смысла помещать что-либо в тело ответа, например, если это перенаправление.

...