Django перезаписать значение заголовка в объекте запроса - PullRequest
0 голосов
/ 31 марта 2020

Я пишу промежуточное программное обеспечение, которое, когда получает запрос, содержащий заголовок 'Foo', изменяет его значение перед передачей запроса.

Django делает прямое назначение недопустимым, поэтому они не работают :

request.headers['Foo'] = 'bar'
request['Foo'] = 'bar'

У меня есть рабочее решение, но оно немного хакерское:

request.headers.__dict__['_store']['foo']=('Foo','bar')

Есть ли более чистый способ сделать это, что я пропустил?

1 Ответ

0 голосов
/ 31 марта 2020

Заголовки HTTP содержатся в request.META, который является просто словарем, который вы можете прочитать и написать . В META имена заголовков имеют префикс HTTP_ и прописные буквы. Таким образом, чтобы получить доступ к заголовку 'Foo', вы должны сделать:

request.META['HTTP_FOO'] = 'bar'

Свойство headers (собственно свойство cached) - это просто удобный способ доступа к заголовкам HTTP, не беспокоясь о префиксе. и верхний регистр, но он доступен только для чтения.

Чтобы сбросить кэшированное свойство, просто удалите его из __dict__ экземпляра, например:

request.__dict__.pop('headers', None)

Это обеспечит вызов метода снова в следующий раз к нему обращаются. Я добавил None к pop(), чтобы гарантировать, что это не обработает sh, поскольку, если к нему не было доступа, оно не будет в __dict__. Если вы обращаетесь к нему явно в своем собственном коде, тогда достаточно request.__dict__.pop('headers').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...