2015-12-18 83 views
2

得到一個錯誤,一個名爲「security_hash」Django的意見security_hash

它說,在documentation具備了我所使用的HiddenInput場{{形式}}在我的模板,這些值會被自動創建

但我不使用的模板,而只是評論/後/端點POST數據如下:

enter image description here

我怎樣才能獲得security_hash值沒有這個額外的觀點作爲POST值傳入?

編輯:我在想,將模板/視圖中的{{form.security_hash}}值傳遞給幕後的窗體是可行的,因此可以避免此錯誤。

EDIT2:爲了說明問題的security_hash字段是shown here in code的security_hash值看起來像被從它使用content_type, object_pk,和timestamp字段來產生上線73的散列的「initial_security_hash」函數生成它,這個函數被調用上線69

由於這個我也進一步困惑,爲什麼我的輸入沒有被我通過在content_type, object_pk接受,timestamp領域

+0

你可以提供關於你的實際調用上下文的更多細節嗎?你在哪裏發起POST請求?我猜你實際上並沒有使用提供的'CommentSecurityForm'。你的實際情況是什麼? – metahamza

+0

@metahamza我在urls.py文件(https://github.com/django/django-contrib-comments/blob/master/django_comments/urls.py#L11)中規定的/ post/endpoint上打電話)鏈接到這個視圖(https://github.com/django/django-contrib-comments/blob/master/django_comments/views/comments.py#L34)。我提供了所有的細節,如我的POST調用中的問題所示。 – ArdentBlaze

+0

是的,這是有道理的,我的意思更像是,POST調用從哪裏開始?從JavaScript中的AJAX調用?從工人流程?另一個Django視圖? – metahamza

回答

2

發生這種情況,因爲安全散列從產生實例化CommentSecurityForm。然後,將安全哈希值作爲隱藏字段包括在內,並通過POST請求傳遞回來,並在此時進行驗證。

即使您傳遞content_typeobject_pktimestamp領域的要求,也不要緊,因爲你需要有security_hash提交POST請求之前。

看看這裏的文檔 - https://github.com/django/django-contrib-comments/blob/master/django_comments/forms.py#L62

我猜你不使用提供CommentSecurityForm,這將自動包括安全驗證字段。

如果該假設是正確的,你應該實例的形式,像

my_form = CommentSecurityForm(users.MyUser) 
security_dict = my_form.generate_security_data() 

然後,這個security_dict容器下面的鍵 - content_typeobject_pktimestampsecurity_hash。然後,您需要將這些值傳遞給POST請求啓動的任何上下文,並將它們包含在安全驗證通過的請求中。