web-dev-qa-db-ja.com

Phonegapでアクセスすると、Django appのAccess-Control-Allow-Origin

Djangoベースのアプリ用にPhonegapアプリを開発していますが、Ajax呼び出しを行おうとするとこのエラーが発生します。

XMLHttpRequest cannot load http://domain.herokuapp.com/getcsrf/?tags=jquery%2Cjavascript&tagmode=any&format=json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 

私のDjangoアプリがいくつかのURLでクロスOriginを許可するようにするにはどうすればよいですか?

これが私のAjaxコードです。

get: function() {
    $.getJSON("http://domain.herokuapp.com/getcsrf/",
    {
        tags: "jquery,javascript",
        tagmode: "any",
        format: "json"
    },
    function(data) {
        $.each(data.items, function(item){
            console.log(item);
            });
    });
}
38
Sascuash

Djangoはデフォルトで、クロスオリジンを提供するために必要なヘッダーを提供しません。最も簡単な方法は、これを使用することですDjangoそれを処理するアプリ: https://github.com/ottoyiu/Django-cors-headers

その後、設定を使用してホワイトリストに登録するドメインを設定できます

CORS_Origin_WHITELIST = (
    'google.com',
    'hostname.example.com'
)

すべての許可をサポートするには、設定を使用してください... CORS_Origin_ALLOW_ALL = Trueそして、ミドルウェアまたはビューでリクエストのフィルタリングを行います。

69
stormlifter

単一ビューの場合、ヘッダーを手動で追加できます。

@require_GET
def api_getto(request):
    response = JsonResponse(
        # your stuff here
    )
    response["Access-Control-Allow-Origin"] = "*"
    response["Access-Control-Allow-Methods"] = "GET, OPTIONS"
    response["Access-Control-Max-Age"] = "1000"
    response["Access-Control-Allow-Headers"] = "X-Requested-With, Content-Type"
    return response
10