首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Django中检查CSRF

如何在Django中检查CSRF
EN

Stack Overflow用户
提问于 2014-08-06 06:19:57
回答 2查看 248关注 0票数 0

Django有一个CSRF模块来防止跨站点请求伪造。为了使用它,我们必须从django导入csrf模块,传递请求,并将其传递给模板。就像这样。

代码语言:javascript
运行
复制
def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response("login.html",c)

在模板的末尾,我们只需要像这样添加到表单中

代码语言:javascript
运行
复制
<form action="/articles/create/" method="post" enctype="multipart/form-data"/>
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<input type="submit" name="submit" value="Create Article" />
</form>

但在接收端(/articles/create/ )-在这里,我们不检查令牌。这个CSRF令牌是由django自动检查的,还是我们需要做些什么?因为我们也可以在没有这个令牌的情况下创建表单,这样就可以正常工作了。

EN

回答 2

Stack Overflow用户

发布于 2014-08-06 06:31:12

Django为您处理它,您只需将其传递给模板,并使用{% csrf_token %}将其传递给视图。事实上,你不需要显式地传递令牌,使用render快捷方式,Django会为你传递令牌。

代码语言:javascript
运行
复制
from django.shortcuts import render

def my_view(request):
...
  return render(request, 'my_template.html', my_data)
票数 0
EN

Stack Overflow用户

发布于 2014-08-06 06:32:10

首先,您需要在您的设置中启用中间件:

代码语言:javascript
运行
复制
django.middleware.csrf.CsrfViewMiddleware

然后在表单模板中,在开始标记之后使用:

代码语言:javascript
运行
复制
{% csrf_token %}

在您的视图中:

如果您使用的是通用视图,那么您将被介绍,因为通用视图使用RequestContext (反过来使用csrf上下文处理器)。基于类的视图也不需要这个,你唯一需要在视图中处理CSRF的时候就是你没有使用上面的任何一个的时候:

代码语言:javascript
运行
复制
django.core.context_processors.csrf
from django.shortcuts import render_to_response

def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response("login.html",c)

此外,如果您正在使用AJAX,则需要实现一些额外的工作,以便将CSRF传输到支持CSRF的视图。您可以了解更多信息:

https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25149287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档