try*_*arn 1 python django rest cors angularjs
解决方案:在网址末尾添加一个尾部斜杠...
" 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 request提取数据但是我遇到了这个错误:
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.
Run Code Online (Sandbox Code Playgroud)
我试图安装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);
});
},
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
TL; DR
将您的AJAX请求发送到斜杠附加的URL.
说明
在我们的讨论之后,看起来罪魁祸首是Django的自动APPEND_SLASH = True,它在启用时CommonMiddleware启用.
这会导致Angular应用程序的AJAX请求首先301 Moved Permanently重定向到斜杠附加的URL.但是,corsheaders中间件不会对此响应起作用,因此浏览器会抱怨缺少Access-Control-Allow-Origin标头.
这是通过直接请求斜杠附加的URL并完全绕过301重定向来解决的.
$http({
method: 'GET',
url: 'http://127.0.0.1:8000/xyz/api/abc/', // trailing slash here
cache: false
}).success(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |