所以我试图在Django中启用跨源资源共享,这样我就可以发布到外部站点,并且当我设置时很容易做到
response["Access-Control-Allow-Origin"]="*"
但我想让它检查来源是否在允许的来源列表中(本质上是将其限制为仅允许特定站点),但我似乎无法在 Django 请求中找到可以获取来源信息的任何位置.
我尝试使用 request.META['HTTP_HOST'] 但这只是返回要发布到的网站。有谁知道在 Request 对象中我可以获取请求的来源吗?
至于从
request
获取网址(这就是我正在寻找的),请使用 request.META['HTTP_REFERER']
代替。
在 Django 中,
request.headers['Origin']
回答原来的问题。
您可以
print(request.headers)
查看标题中可用的所有内容。
可以通过请求获取.META["HTTP_ORIGIN"]
我强烈建议你使用django-cors-headers。它可以让你定义
CORS_ORIGIN_WHITELIST
,这是一个以更 Pythonic 的方式允许的来源列表。
要回答“有人知道我可以在 Request 对象中的何处获取请求的来源吗?”这个问题,request.META['REMOTE_ADDR'] 能否满足您的需求?
在 Django 2.2 中使用:
request.META.get('HTTP_REFERER')
确保请求属性没有 mode = no-cors
参见:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
“上述规则也有一些例外;例如,如果在 no-cors 模式下发出跨域 GET 或 HEAD 请求,则不会添加 Origin 标头。”