在 Django 请求中获取请求源

问题描述 投票:0回答:7

所以我试图在Django中启用跨源资源共享,这样我就可以发布到外部站点,并且当我设置时很容易做到

response["Access-Control-Allow-Origin"]="*" 

但我想让它检查来源是否在允许的来源列表中(本质上是将其限制为仅允许特定站点),但我似乎无法在 Django 请求中找到可以获取来源信息的任何位置.

我尝试使用 request.META['HTTP_HOST'] 但这只是返回要发布到的网站。有谁知道在 Request 对象中我可以获取请求的来源吗?

python django post cross-domain
7个回答
27
投票

至于从

request
获取网址(这就是我正在寻找的),请使用
request.META['HTTP_REFERER']
代替。


10
投票

在 Django 中,

request.headers['Origin']

回答原来的问题。

您可以

print(request.headers)
查看标题中可用的所有内容。


2
投票

使用这个:

origin = request.META.get("HTTP_ORIGIN")

这是

django-cors-headers
中间件中使用它的方式:


1
投票

可以通过请求获取.META["HTTP_ORIGIN"]


0
投票

我强烈建议你使用django-cors-headers。它可以让你定义

CORS_ORIGIN_WHITELIST
,这是一个以更 Pythonic 的方式允许的来源列表。


0
投票

要回答“有人知道我可以在 Request 对象中的何处获取请求的来源吗?”这个问题,request.META['REMOTE_ADDR'] 能否满足您的需求?


0
投票

在 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 标头。”

© www.soinside.com 2019 - 2024. All rights reserved.