Je développe une application Phonegap pour mon Django), mais lorsque j'essaie de passer des appels en Ajax, le message d'erreur suivant s'affiche:
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.
Comment puis-je faire en sorte que mon Django autorise le croisement de l'origine pour certaines urls?
Voici mon code 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);
});
});
}
Django par défaut ne fournit pas les en-têtes nécessaires pour fournir une origine croisée. Le plus simple serait d’utiliser simplement cette Django application qui la gère pour vous: https://github.com/ottoyiu/Django-cors-headers
Vous pouvez ensuite définir les domaines pour lesquels vous souhaitez une liste blanche à l'aide des paramètres.
CORS_Origin_WHITELIST = (
'google.com',
'hostname.example.com'
)
pour permettre tout, utilisez simplement le paramètre ... CORS_Origin_ALLOW_ALL = True
puis effectuez tout filtrage de la demande dans le middleware ou dans la vue.
Pour les vues uniques, vous pouvez ajouter manuellement des en-têtes:
@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