我很好奇:我知道在Django中有兩種csrf保護方式:{% csrf_token %}
模板和@csrf_protect
在視圖中。Django {%csrf_token%}或@csrf_protect
所以,問題是:它們是可以互換的嗎?我的意思是我可以使用例如只@csrf_protect
我的意見沒有{% csrf_token %}
標籤在我的模板和效果會一樣嗎?
我問,因爲我在最近Django項目使用鯖並沒有這樣的標記作爲{% csrf_token %}
...
謝謝!
我很好奇:我知道在Django中有兩種csrf保護方式:{% csrf_token %}
模板和@csrf_protect
在視圖中。Django {%csrf_token%}或@csrf_protect
所以,問題是:它們是可以互換的嗎?我的意思是我可以使用例如只@csrf_protect
我的意見沒有{% csrf_token %}
標籤在我的模板和效果會一樣嗎?
我問,因爲我在最近Django項目使用鯖並沒有這樣的標記作爲{% csrf_token %}
...
謝謝!
你需要兩個。 {% csrf_token %}
添加了POST
請求中包含的隱藏字段。 @csrf_protect
增加了一個由{% csrf_token %}
使用的上下文變量。
但文檔說:1)或者,您可以使用裝飾器csrf_protect()在您的特定視圖想要保護(見下文)。 2)與其添加CsrfViewMiddleware作爲一攬子保護,您可以在需要保護的特定視圖上使用具有完全相同功能的csrf_protect修飾器。它必須用於在輸出中插入CSRF標記的視圖以及接受POST表單數據的視圖中。 –
@VitaliPonomar您總是需要表單內的{%csrf_token%}',視圖必須添加所需的上下文變量。如果上下文變量通過裝飾器,中間件或手動添加無關緊要,只需將它作爲一對。 –
1.'{%csrf_token%}'必須存在於模板2.視圖應該由'@ csrf_protect'或'CSRF中間件'保護。 如果您使用的是其他模板引擎或AJAX,則需要在模板上下文中提供csrf標記。請閱讀:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#other-template-engines – Medorator