2010-06-27 3 views
0

Я хотел бы назвать функцию в своем представлении или в любом модуле и обновить тело ответа.Django вы можете получать сигналы в промежуточном программном обеспечении или изменять объект ответа по всему миру?

Мое первоначальное мышление заключается в реализации промежуточного программного обеспечения 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 
+0

Как вы получаете объект ответа в обратном вызове? –

+0

Eh плохой образец кода. Метод живет в классе промежуточного ПО и будет устанавливать свойство экземпляра, которое может быть использовано для обновления тела ответа в методе 'process_response'. –

+0

Это не сработает. Среднее программное обеспечение создается для каждого процесса, а не для запроса. –

ответ

0

Если вы действительно хотите сделать это, вы могли бы использовать request как сват

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

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

+0

Это неплохое решение. Прямо сейчас я просто использую глобальные vars в своем настраиваемом модуле, который чувствует себя jenky, но он в основном предназначен для разработки и отладки, поэтому я не слишком беспокоюсь об этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^