django 1.2.1更新後 關於CSRF token missing or incorrect的問題

CSRF(跨站請求僞造),django 1.2.1在projects的setting中默認配置了處理CSRF的中間件 'django.middleware.csrf.CsrfViewMiddleware',

因此,如果post提交表單的html代碼如下,django會拋出一個異常.
CSRF token missing or incorrect.
<form action="{%url listenCms:submitComment articleObj.id %}" method="post">
      <div class="commentTextArea">
        <textarea name="content" cols="" rows=""></textarea>
        <input name="articleId" type="hidden" value="`articleObj`.`id`" />
      </div>
      <input name="submit" value="提交評論" type="submit" />
    </form>


同樣在異常信息中,django給出瞭解決方案.

In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.

所以html如下,在form區域內加上了{% csrf_token %}
這個標籤會自動被django模板處理成一段html
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='a7ad524eaa3c6f536a6afb7b56a40421' /></div>
這應該是用來讓CsrfViewMiddleware 中間件進行處理時一個標識吧,這個隱藏域的value看起來是一個32位加密的MD5值。

加上{% csrf_token %}的HTML。

    <form action="{%url listenCms:submitComment articleObj.id %}" method="post">{% csrf_token %}
      <div class="commentTextArea">
        <textarea name="content" cols="" rows=""></textarea>
        <input name="articleId" type="hidden" value="`articleObj`.`id`" />
      </div>
      <input name="submit" value="提交評論" type="submit" />
    </form>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章