在Django

时间:2016-07-20 13:01:29

标签: javascript django cors cross-domain overpass-api

我试图在Django上运行的项目中使用带有JavaScript XMLHttpRequest的立交桥API http://wiki.openstreetmap.org/wiki/Overpass_API,但我一直在使用

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.google.com/accounts/ClientLogin. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 

错误。无论我是使用GET还是POST,还是从任何其他主机,而不仅仅是立交API,我都会收到此错误。

我已经安装了django-cors-headers https://github.com/ottoyiu/django-cors-headers,并按照其中的说明进行操作,并将“corsheaders”放入其中。进入INSTALLED_APPS,' corsheaders.middleware.CorsMiddleware' django.middleware.common.CommonMiddleware',进入MIDDLEWARE_APPS并设置

CORS_ORIGIN_ALLOW_ALL = true 
在settings.py中

但似乎没有任何效果。我用

在本地运行它
python manage.py runserver

但我也在openshift上托管它。在这些工作中,他们都没有给出上述错误。

如果我在这里遗漏任何东西,请告诉我。

3 个答案:

答案 0 :(得分:4)

尝试从我的笔记本电脑(Django Rest Framework)访问Heroku托管的localhost API时遇到了同样的问题。我使用的是Django 1.10.2DRF 3.4.7python v3.4

我做了pip install django-cors-headers(版本1.2.2)并将其配置为docs然后再次出现同样的错误:(

继续搜索几个小时然后它就击中了我!

我做了pip install django-cors-middleware(版本1.3.1)而没有卸载 django-cors-headers包。此外,我没有触及settings.py文件中的内容(它被配置为django-cors-headers设置,尽管这两个包没有太多差异 - 后者是第一个的分支。 / p>

点击刷新(来自localhost),一切都运行得非常好!

我现在可以通过jQuery's ajax方法从myapp.herokuapp.com获取数据。

答案 1 :(得分:2)

请记住将“ corsheaders.middleware.CorsMiddleware”放在列表的顶部,并且“ django.middleware.common.CommonMiddleware”已经是标准的中间件

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
 ]

答案 2 :(得分:2)

CORS_ORIGIN_ALLOW_ALL = true

应为:

CORS_ORIGIN_ALLOW_ALL =正确

T 大写字母为True。 添加其他必需的中间件

MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', ]

并将“ corsheaders”注册到INSTALLED_APPS。