我在Django和REST框架中有后端用于API服务。 我试图用cordova框架制作nativ应用程序。
我建立了一些服务:
var RegionService = function(){
var url;
this.initialize = function(){
url = "http://127.0.0.1:8000/api/regions/";
var deferred = $.Deferred();
deferred.resolve();
return deferred.promise();
}
this.List = function(){
return $.ajax({
type : "GET",
url : url
});
}
this.Get = function(id){
return $.ajax({
type : "GET",
url : url + id + "/"
});
}
}
并在index.js
中var regions = new RegionService();
regions.initialize().done(function() {
console.log("Regions initialized");
regions.List().done(function(data){
console.log("LIST");
console.log(data);
});
});
我通过浏览器平台测试cordova: cordova运行浏览器
当我运行这个应用程序时,我在浏览器中进入控制台:
Regions initialized
XMLHttpRequest cannot load http://127.0.0.1:8000/api/regions/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8001' is therefore not allowed access.
Django后端运行在127.0.0.1:8000,移动应用程序127.0.0.1:8001
答案 0 :(得分:2)
听起来你需要在你的django后端启用CORS(跨源资源共享)。看看这个django应用程序:https://github.com/ottoyiu/django-cors-headers/
该应用添加了在每个响应中添加CORS标头的中间件,因此您不必更改任何视图或django rest框架中的视图。
pip install django-cors-headers
在你的settings.py中:
INSTALLED_APPS = (
...
'corsheaders',
...
)
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:8001',
)
在本地开发时,您还可以尝试设置:CORS_ORIGIN_ALLOW_ALL = True
以允许来自任何主机的跨站点请求。但是,你不应该在任何非本地环境中这样做。