Django rest 框架和跨源请求
Posted
技术标签:
【中文标题】Django rest 框架和跨源请求【英文标题】:Django rest framework and cross origin requests 【发布时间】:2017-05-22 05:11:53 【问题描述】:我尝试从 javascript 客户端发出一些请求,以使用 Django 休息框架构建休息 api。 对 /api/test 的所有 GET 请求都是公开的,因此不需要会话、令牌或水。 所有 POST 到 api/test 都是私有的,用户必须使用 oauth2
根据the documentation,我必须使用django-core-headers 管理跨源请求。将此模块安装到我的 django 后,我设置了
CORS_ORIGIN_ALLOW_ALL
到 True
但是:
1)这是一个好习惯吗?
2) 是否有一个好的解决方案只允许在某些点上进行跨域请求?
谢谢
【问题讨论】:
【参考方案1】:使用 django-core-headers,您可以使用 CORS_ORIGIN_WHITELIST
和 CORS_ORIGIN_REGEX_WHITELIST
限制 CORS 来源。如果您不需要 允许任意来源,请设置它们;否则,你很好。
如果您愿意,您可以编写一个装饰器来检查您的视图中的原点,以查看它是否与所需的原点匹配(也许在跟踪哪些用户被授权进行 POST 请求的任何模型上设置了一些东西?)。但是,如果您允许来自任意来源的 GET 请求,并且不关心 POST 请求的来源,只要它们被授权,那么您就很清楚了——毕竟,如果您不这样做,您如何限制来源'不知道客户可能从哪里提出请求?
【讨论】:
感谢您的回答。不幸的是,可以从客户浏览器完成请求,然后我无法设置白名单:(以上是关于Django rest 框架和跨源请求的主要内容,如果未能解决你的问题,请参考以下文章