Рекомендации Django DRF по возвращению заголовков ответов на каждый запрос

#python #django #django-rest-framework #cache-control #x-frame-options

Вопрос:

Я использую Django DRF.

Каков наилучший способ добавить нижеприведенные заголовки ответов в каждый запрос

 Cache-control: no-store, max-age=0

Pragma: no-cache 

Strict-Transport-Security: max-age=7776000; includeSubDomains

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

X-Frame-Options: DENY
 

В идеале я хочу настроить это в одном месте.

Комментарии:

1. Похоже, вам нужно промежуточное программное обеспечение Django .

Ответ №1:

Из документации DRF:

Подпись: Ответ(данные, статус=Нет, имя шаблона=Нет, заголовки=Нет, тип содержимого=Нет)

заголовки: словарь заголовков HTTP для использования в ответе.

Так что просто используйте его вот так:

 def foo(request):
    # logic
    headers = {
        'Cache-control': 'no-store, max-age=0',
        # ...
        'X-Frame-Options': 'DENY'
    }
    return Response(your_data, headers)
 

Если вы хотите использовать его для каждого запроса, просто создайте свой собственный класс ответов:

 CustomResponse(Response):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.headers= {
            'Cache-control': 'no-store, max-age=0',
            # ...
            'X-Frame-Options': 'DENY'
        }
 

Или другое решение, возможно, более простое, создайте глобальную переменную заголовков и используйте ее в своем объекте ответа.