2014-05-19 18 views
-1

我得出的結論frightning,它可能無法使用Ajax和儘可能的CSRF保護而言Django的不兼容。但是,如果我做render_to_response,那將重新加載使得Ajax無用的頁面。django。要使用csrf,必須調用render_to_response;</p> <pre><code>def my_view(request): c = {} c.update(csrf(request)) return render_to_response("a_template.html", c) </code></pre> <p>這從Django中的例子:使用Ajax網頁重新加載

有沒有辦法解決這個問題?

+0

這是可行的。這篇文章可能會幫助你開始:http://racingtadpole.com/blog/django-ajax-and-jquery/ – karthikr

+0

感謝karthikr,我沒有使用像這樣的模板:{%csrf_token%} ...我不知道如何在沒有模板的情況下設置csrf cookie。 –

+0

這是你如何做到這一點:stackoverflow.com/questions/3289860/...或者也是這樣的:docs.djangoproject.com/en/dev/ref/contrib/csrf/... –

回答

0

您的結論完全不正確。

Django文檔給出了非常好的how to use Ajax with CSRF的概述。您斷言您需要使用render_to_response是一個紅鯡魚:這是將價值轉化爲模板的一種方式,但正如文檔所說,規範的價值在cookie中。無論如何,很有可能通過render_to_response(或更好的render())返回Ajax響應而無需刷新頁面:這取決於您的Javascript。

+0

但誰設置cookie?不是在這裏設置的cookie:c.update(csrf(request))? –

+0

不,完全沒有。這只是將其包含在模板上下文中:如果您沒有使用帶有{%csrf_token%}調用的模板,則無關緊要。正如文檔所述,cookie由CSRF中間件自動設置:請參閱[源代碼](https://github.com/django/django/blob/1.6/django/middleware/csrf.py#L197)。 –

+0

我;我第一次呈現頁面時不會調用django。它是一個靜態頁面,它根據需要異步調用django。另外,我啓用了csrf中間件。當我試圖用js來得到苦力時,它的缺失,它不在那裏。 –