Django + ajax(jquery):http错误代码403(禁止)[关闭]
Posted
技术标签:
【中文标题】Django + ajax(jquery):http错误代码403(禁止)[关闭]【英文标题】:Django+ajax (jquery): http error code 403 (forbidden) [closed] 【发布时间】:2011-12-14 07:16:57 【问题描述】:我正在页面中使用 jquery 开发一个简单的 ajax 调用($.ajax 函数,类型、url 和数据作为选项参数),但出现 403 错误。
所以我在 $.ajax 函数中添加了一个用于 csrf 的进一步选项参数,并且相应的标记正确地显示在模板中。
但是我又遇到了 403 错误。
我还尝试向视图处理程序(在 views.py 中)添加一个 csrf 装饰器,例如 @csrf_protect
或 @requires_csrf_token
,但没有任何改变。
有什么帮助吗?
我已经看到这种模式在 django https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#s-ajax 中进行 ajax 调用
但是我做一个简单的ajax调用真的太多代码了,所以我找到了一个简短的解决方案
【问题讨论】:
文档的存在是有原因的。你得到一个 403 因为 CSRF 令牌没有被传递。按照文档说的去做,你会没事的。 对不起,我不知道如何接受。现在我看到了接受的按钮。这对我来说根本不直观,如果有一个鼠标悬停事件处理程序可以在鼠标悬停时为按钮着色,我认为用户体验会更好。 【参考方案1】:如果您不想对该视图使用 CSRF 保护,那么您想要的装饰器是 @csrf_exempt
--其他的只会确保应用了 CSRF 保护。这可能是最简单的解决方案,尤其是在调用对安全性不是特别敏感的情况下。
或者,请确保您遵循此处文档中提到的方法:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#page-uses-ajax-without-any-html-form
【讨论】:
秘诀是把它添加到你的views.py的顶部:from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
以上是关于Django + ajax(jquery):http错误代码403(禁止)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
无法将 jquery/ajax 集成到 django 项目中
如何在 Django 中使用 jQuery/Ajax 发布?