【发布时间】:2011-09-24 05:40:51
【问题描述】:
我正在尝试this example。每当我尝试访问 dajax 函数时,它都会给出“没有 csrf 或会话 cookie”错误。如何在 javascript 中添加 csrf 令牌。我尝试在模板中添加 csrf 令牌,但没有成功。
【问题讨论】:
我正在尝试this example。每当我尝试访问 dajax 函数时,它都会给出“没有 csrf 或会话 cookie”错误。如何在 javascript 中添加 csrf 令牌。我尝试在模板中添加 csrf 令牌,但没有成功。
【问题讨论】:
1) 在 settings.py 中将 'django.middleware.csrf.CsrfViewMiddleware' 添加到你的 middleware_classes
2) 在模板中的标记之后,使用 {% csrf_token %}
基本上就是这样
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 在这里您可以找到有关 javascript 和 ajax csrf 令牌的信息
【讨论】:
来自django doc:
将中间件“django.middleware.csrf.CsrfViewMiddleware”添加到中间件类列表 MIDDLEWARE_CLASSES。 (如果正在使用它,它应该出现在 CsrfResponseMiddleware 之前,并且在任何假定 CSRF 攻击已被处理的视图中间件之前。) 或者,您可以在要保护的特定视图上使用装饰器 django.views.decorators.csrf.csrf_protect(见下文)。
在任何使用 POST 表单的模板中,如果表单用于内部 URL,请在元素内使用 csrf_token 标记:
{% csrf_token %}
对于以外部 URL 为目标的 POST 表单不应该这样做,因为这会导致 CSRF 令牌泄露,从而导致漏洞。
在相应的视图函数中,确保正在使用“django.core.context_processors.csrf”上下文处理器。通常,这可以通过以下两种方式之一完成:
3.1 使用 RequestContext,它始终使用“django.core.context_processors.csrf”(无论您的 TEMPLATE_CONTEXT_PROCESSORS 设置如何)。如果您使用的是通用视图或贡献应用程序,那么您已经被覆盖了,因为这些应用程序自始至终都使用 RequestContext。
3.2 手动导入并使用处理器生成CSRF令牌并将其添加到模板上下文中。
【讨论】: