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