2014-05-19 17 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来得到苦力时,它的缺失,它不在那里。 –