【问题标题】:Django DRF best practices to return response headers on every requestDjango DRF 最佳实践在每个请求上返回响应标头
【发布时间】:2026-01-09 08:10:02
【问题描述】:

我正在使用 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

理想情况下,我想在一个地方进行配置。

【问题讨论】:

标签: python django django-rest-framework cache-control x-frame-options


【解决方案1】:

来自DRF documentation

签名:响应(data,status=None,template_name=None,headers=None,content_type=None)

headers:响应中使用的 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'
        }

或者,另一种可能更简单的解决方案,创建一个全局 headers 变量并在您的 Response 对象中使用它。

【讨论】: