Python 向Wagtail页面添加自定义HTTP头

Python 向Wagtail页面添加自定义HTTP头,python,django,python-3.x,wagtail,Python,Django,Python 3.x,Wagtail,我正在寻找一个新的Wagtail网站制作,并使用了一些设置,如安全浏览器>安全过滤器和安全秒 安全中间件中似乎没有提供一个HTTP头。我希望此标题(最好有条件地基于production.pysettings文件中的(a)设置)具有如下值: max age=31536000,强制执行,报告uri=”https://username.report-uri.com/r/d/ct/enforce“ 在Wagtail中实现这个和其他自定义HTTP头的好方法是什么 我查看了现有的安全中间件,并尝试在Wagt

我正在寻找一个新的Wagtail网站制作,并使用了一些设置,如
安全浏览器>安全过滤器
安全秒

安全中间件中似乎没有提供一个HTTP头。我希望此标题(最好有条件地基于
production.py
settings文件中的(a)设置)具有如下值:

max age=31536000,强制执行,报告uri=”https://username.report-uri.com/r/d/ct/enforce“

在Wagtail中实现这个和其他自定义HTTP头的好方法是什么

我查看了现有的安全中间件,并尝试在Wagtail项目中的文件中创建自己的中间件,但不确定如何在
base.py
文件中引用项目中的文件/模块。(我目前是Wagtail/Django/Python初学者。)谢谢


编辑:我希望我尝试向安全中间件请求一个pull请求是值得的,但是在每个项目/临时的基础上向站点添加自定义头将是我希望能够做到的事情。

我的问题是我不知道模块路径与文件名直接相关

以下中间件基于设置创建并添加标头

中间件模块的位置
myu项目
├── 我的应用程序
│   ├── 设置
│   │   ├── base.py
│   │   ├── production.py
│   ├── 中间件.py
my_app/settings/base.py
中间件=[
# ...
“我的应用程序.中间件.自定义HttpHeadersMiddleware”,
]
my_app/middleware.py
导入日志
从django.conf导入设置
类CustomHttpHeadersMiddleware:
定义初始化(自我,获取响应):
self.get\u response=get\u response
尝试:
self.expect\u ct=settings.CUSTOM\u SECURE\u expect\u ct
除属性错误外:
self.expect\u ct=False
定义呼叫(自我,请求):
响应=自我获取响应(请求)
如果self.expect\u ct:
响应['Expect-CT']=self.\u Expect\u CT\u header\u value()
返回响应
def _预期值ct U标头U值(自身):
logger=logging.getLogger(_名称__)
尝试:
max\u age=settings.CUSTOM\u SECURE\u EXPECT\u CT\u max\u age
除属性错误外:
最大年龄=60*60*24天
logger.warning('CUSTOM\u SECURE\u EXPECT\u CT设置为True,但CUSTOM\u SECURE\u EXPECT\u CT\u MAX\u AGE设置未设置。应用了%s的默认值。“%MAX\u AGE)
尝试:
强制=设置。自定义\u安全\u期望\u CT\u强制
除属性错误外:
强制执行=错误
logger.warning('自定义\u安全\u期望\u CT设置为True,但未设置自定义\u安全\u期望\u CT\u强制设置。默认值为False')
尝试:
report\u uri=settings.CUSTOM\u SECURE\u EXPECT\u CT\u report\u uri
除属性错误外:
报告uri=False
logger.warning('CUSTOM\u SECURE\u EXPECT\u CT设置为True,但CUSTOM\u SECURE\u EXPECT\u CT\u REPORT\u URI设置未设置。默认值为False。“)
值='max age=%s'%max\u age
如果强制执行:
值+=',强制'
如果报告的uri为:
值+=',报告uri=“%s”'%report\u uri
返回值
my_app/settings/production.py
#自定义中间件。
自定义\u安全\u期望\u CT=True
定制安全预期最大年龄=60*60*24*365#1年
自定义\u安全\u期望\u CT\u强制=真
自定义\u安全\u期望\u CT\u报告\u URI='0https://username.report-uri.com/r/d/ct/enforce'

编写自己的Django中间件并激活它:。如果您喜欢每页的标题(内容类型),您可以覆盖Wagtail服务方法设置响应标题自定义全局设置
FOO=42
,并从django.conf导入设置导入
;settings.FOO
。或通过“每页摇尾”设置的用户可配置设置,在页面中创建一个字段。例如
foo=models.SomeField(…)
并在服务方法中使用
self.foo
。谢谢,@allcaps。我确实开始创建自己的中间件,但我不知道将它放在哪个文件中,以及在
base.py
中添加到
中间件时如何引用它。例如,我得到的
AttributeError:module'my_project'没有属性“CustomHttpHeadersMiddleware”
ImportError:CustomHttpHeadersMiddleware看起来不像模块路径
。你知道Wagtail项目的惯例吗?我想我知道了。在文件
my_-app/middleware.py
中,我有
类CustomHttpHeadersMiddleware
,并且
“my_-app.middleware.CustomHttpHeadersMiddleware”成功加载此中间件。为这一混乱道歉。当它按预期工作时,我会根据你的评论写一个完整的答案。