我正在尝试this example。每当我尝试访问dajax函数时,它都会出现“no csrf或session cookie”错误。如何在javascript中添加csrf令牌。我尝试在模板中添加csrf令牌但它不起作用。
答案 0 :(得分:2)
1)将'django.middleware.csrf.CsrfViewMiddleware'添加到settings.py中的middleware_classes
2)在模板中的标记之后,使用{%csrf_token%}
基本上,就是它https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax在这里你可以找到关于javascript和ajax csrf标记的文件
答案 1 :(得分:1)
来自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设置如何)。如果您使用的是通用视图或contrib应用程序,则您已经被覆盖,因为这些应用程序始终使用RequestContext。
3.2手动导入并使用处理器生成CSRF令牌并将其添加到模板上下文中。
答案 2 :(得分:1)