No' Access-Control-Allow-Origin'在localhost上

时间:2016-02-26 23:57:52

标签: jquery django cordova

我在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

1 个答案:

答案 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以允许来自任何主机的跨站点请求。但是,你不应该在任何非本地环境中这样做。