Django {% csrf_token %}或@csrf_protect

时间:2022-09-07 19:35:58

I am curious: I know there are 2 ways of csrf protection in Django: {% csrf_token %} in templates and @csrf_protect in views.

我很好奇:我知道Django中有两种csrf保护方法:模板中的{% csrf_token %}和视图中的@csrf_protect。

So, question is: are they interchangeable? I mean I can use for example only @csrf_protect i my views without {% csrf_token %} tag in my templates and effect will be the same?

所以,问题是:它们是可以互换的吗?我的意思是我可以只使用@csrf_protect我的视图而不使用我的模板中的{% csrf_token %}标签,效果会是一样的吗?

I'm asking that because I use mako in recent Django project and there is no such tag as {% csrf_token %}...

我这么问是因为我在最近的Django项目中使用了mako,并且没有{% csrf_token %}这样的标签……

Thanks!!!

谢谢! ! !

1 个解决方案

#1


2  

You need both. {% csrf_token %} adds hidden fields that is included in POST requests. While @csrf_protect adds a context variable that is used by {% csrf_token %}.

你需要两个。{% csrf_token %}添加包含在POST请求中的隐藏字段。而@csrf_protect添加了一个由{% csrf_token %}使用的上下文变量。

#1


2  

You need both. {% csrf_token %} adds hidden fields that is included in POST requests. While @csrf_protect adds a context variable that is used by {% csrf_token %}.

你需要两个。{% csrf_token %}添加包含在POST请求中的隐藏字段。而@csrf_protect添加了一个由{% csrf_token %}使用的上下文变量。