2014-05-19 2 views
-1

Je suis venu à la conclusion frightning qu'il pourrait ne pas être possible d'utiliser ajax et django jusqu'à la protection CSRF concerne:django. pour utiliser csrf, render_to_response doit être appelé; incompatible avec ajax comme page rechargements

def my_view(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response("a_template.html", c) 

C'est l'exemple de django. Cependant, si je fais render_to_response, cela rechargera la page qui rendra ajax inutile.

Existe-t-il un moyen de contourner ce problème?

+0

C'est faisable. Ce message pourrait vous aider à démarrer: http://racingtadpole.com/blog/django-ajax-and-jquery/ – karthikr

+0

merci karthikr, je n'utilise pas de modèles comme dans l'exemple: {% csrf_token%} ... I Je ne sais pas comment définir le cookie csrf sans le modèle. –

+0

voici comment vous le faites: stackoverflow.com/questions/3289860/... ou aussi quelque chose comme ceci: docs.djangoproject.com/en/dev/ref/contrib/csrf/... –

Répondre

0

Votre conclusion est complètement incorrecte.

La documentation de Django donne un très bon aperçu de how to use Ajax with CSRF. Votre affirmation selon laquelle vous devez utiliser render_to_response est un faux-fuyant: c'est une façon d'obtenir la valeur dans le modèle, mais comme le disent les docs, la valeur canonique est dans le cookie. Et de toute façon, il est tout à fait possible de renvoyer une réponse Ajax via render_to_response (ou, mieux encore, render()) sans rafraichir la page: cela dépend de votre Javascript.

+0

mais qui définit le cookie? isnt le cookie réglé ici: c.update (csrf (request))? –

+0

Non, pas du tout. C'est simplement pour l'inclure dans le contexte du modèle: si vous n'utilisez pas un modèle avec un appel '{% csrf_token%}', ce n'est pas pertinent. Comme le disent les docs, le cookie est défini automatiquement par le middleware CSRF: voir [la source] (https://github.com/django/django/blob/1.6/django/middleware/csrf.py#L197). –

+0

Je n'appelle pas django lorsque je rends la page pour la première fois. il s'agit d'une page statique et il appelle django de manière asynchrone selon les besoins. En outre, j'ai le middleware csrf activé. Quand j'ai essayé d'obtenir le coolie en utilisant js, c'est manquant, ce n'est pas là. –