django中到底要如何才能正确使用csrf机制


每次要做csrf保护总是会出现如下的问题,然后弄半天又自己好了 请输入图片描述

但是弄完之后还是一团米糊,下次又不知道怎么弄了

1 settings.py中在middleware中要有'django.middleware.csrf.CsrfViewMiddleware'这个中间件加上了

2 然后在html的表单中也加了{% csrf_token %}

3 然后在视图函数中也加入了装饰器@csrf_protect

4 在跳转模版的时候也加上了context_instance=RequestContext(request) 可是依然会出现上图中的错误

真心希望大神指点一下 上面那些东西哪些是必须的 哪些是不需要的

我看django中auth模块的源码中基本每个视图函数前都加了 @csrf_protect 这个装饰器,然后我在表单中一开始加了 {% csrf_token %} 一开始会出现上图的错误,后来什么也没改又可以post提交了,望大大们指点

python flask django tornado ruby-on-rails

tamon 10 years, 6 months ago

django建议使用 django.middleware.csrf.CsrfViewMiddleware 进行全局控制,不提倡使用 @csrf_protect 进行单view控制,因为这样可能会有遗漏。如果不想进行csrf保护的view可以加上 @csrf_exempt 。 官方 文档 有三个步骤,楼主应该是第三步没弄对:把 django.core.context_processors.csrf 加到配置文件的 TEMPLATE_CONTEXT_PROCESSORS ,或者手动生成csrftoken并加到template context。

卑鄙者的通行证 answered 10 years, 6 months ago

Your Answer