gpt4 book ai didi

ajax - Django 1.3中的Ajax CSRF问题

转载 作者:行者123 更新时间:2023-12-04 13:12:17 24 4
gpt4 key购买 nike

根据django文档,对于1.3中的ajax发布请求(至少使用Jquery),我们只需要将此snippet添加到主js文件中即可。此代码段从cookie中获取csrftoken,然后针对所有ajax请求进行设置。可以,但是如果cookie中不存在csrftoken怎么办?我认为render_to_response和render都会自动检查 session 中的csrftoken,并为我们设置它(如果 token 不存在)。但事实并非如此。所以,我需要自己实现吗?也许还有另一种方式来处理Ajax CSRF保护?

最佳答案

如果页面上没有正在使用{%csrf_token%}的表单,则不会发送该cookie。因此,正如您指出的那样,当您尝试在这样的页面上使用Ajax时,您将得到一个错误。如果您的站点包含多个页面,这些页面具有各种形式的表单和ajax帖子,则这将导致不稳定的行为。

这已经被报告并修复: https://code.djangoproject.com/ticket/15354

该补丁中的解决方案应与1.3.1一起推出,是sure_cookie_csrf装饰器。该装饰器在1.3或1.2.5中不存在

但是,无需等待。只需将此行添加到任何包含AJAX的 View 中,即可发布CSRF表单:

request.META["CSRF_COOKIE_USED"] = True

例子:
def calculator(request):
request.META["CSRF_COOKIE_USED"] = True
return render_to_response('calc.html', {'form': CalcForm()})

仅供引用-这正是装饰者所做的。

关于ajax - Django 1.3中的Ajax CSRF问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com