Access-Control-Allow-Origin w aplikacji Django po uzyskaniu dostępu za pomocą Phonegap

Rozwijam aplikację Phonegap dla mojej aplikacji opartej na Django, ale podczas próby wykonywania połączeń Ajax dostaję ten błąd:

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. 

Jak mogę sprawić, by moja aplikacja Django pozwalała na cross origin dla niektórych adresów URL?

Oto Mój kod 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);
            });
    });
}
Author: Cœur, 2014-03-12

2 answers

Django domyślnie nie dostarcza nagłówków niezbędnych do zapewnienia cross origin. Najprostszym sposobem byłoby użycie tej aplikacji Django, która obsługuje ją za Ciebie: https://github.com/ottoyiu/django-cors-headers

Możesz następnie ustawić dowolne domeny, które chcesz umieścić na liście za pomocą ustawień

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

Aby wspierać allowing all, po prostu użyj tego ustawienia... CORS_ORIGIN_ALLOW_ALL = True a następnie wykonaj filtrowanie żądania w middleware lub w widoku.

 56
Author: stormlifter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 09:04:38

Dla pojedynczych widoków można ręcznie dodać nagłówki:

@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
 3
Author: mariusz_latarnik01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-09 08:17:30