【发布时间】:2016-01-27 07:49:33
【问题描述】:
解决方案:在网址末尾添加一个斜杠...
“http://127.0.0.1:8000/xyz/api/abc/”而不是“http://127.0.0.1:8000/xyz/api/abc”
....
我已经成功创建了一个 Django Rest API,并且似乎能够在本地存储和托管数据。我已经单独构建了一个 angularjs1.0 应用程序并试图通过 $http get 请求提取数据但是我遇到了这个错误:
XMLHttpRequest cannot load http://127.0.0.1:8000/xyz/api/abc. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://172.20.9.163:8080' is therefore not allowed access.
我已尝试安装 CORS 并将其添加到我的 INSTALLED_APPS,但似乎还没有任何效果。
这是获取请求:
getABC : function() {
$http({
method: 'GET',
url: 'http://127.0.0.1:8000/xyz/api/abc',
cache: false
}).success(function(data) {
console.log(data)
callback(data);
});
},
看看我的 Django settings.py 文件:
INSTALLED_APPS = (
'xyz',
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
CORS_ORIGIN_ALLOW_ALL = True
【问题讨论】:
-
您可以在开发工具中打开网络选项卡并检查对您的 AJAX 请求的响应吗?它实际上是否包含
Access-Control-Allow-Origin标头? -
抱歉,我应该在哪里看到这个?我打开了网络选项卡,但在任何地方都看不到 ajax 请求响应。
-
@IgorRaush“远程地址:127.0.0.1:8000 请求 URL:127.0.0.1:8000/xyz/api/abc 请求方法:获取状态代码:301 永久移动(从缓存中)”当点击“响应”选项卡时,它说“此请求没有可用的响应数据。”
-
有什么问题。您的 API 正在返回重定向响应。该响应是否有
Location标头?你能从命令行运行curl --head http://localhost:8000/xyz/api/abc吗? -
另外,似乎请求甚至可能无法到达服务器,它在浏览器中缓存为
301 Moved Permanently...
标签: python angularjs django rest cors