首页 > 解决方案 > Django DRF 最佳实践在每个请求上返回响应标头

问题描述

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

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

标签: pythondjangodjango-rest-frameworkcache-controlx-frame-options

解决方案


来自DRF 文档

签名:响应(数据,状态=无,模板名称=无,标题=无,内容类型=无)

headers:在响应中使用的 HTTP 标头字典。

所以只需像这样使用它:

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

如果您希望在每个请求中都使用它,只需创建您的自定义 Response 类:

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 对象中使用它。


推荐阅读