簡體   English   中英

本地主機上沒有“ Access-Control-Allow-Origin”

[英]No 'Access-Control-Allow-Origin' on the localhost

我在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上運行

聽起來您需要在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以允許來自任何主機的跨站點請求。 但是,您不應該在任何非本地環境中執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM