2015-12-18 62 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请求启动的任何上下文,并将它们包含在安全验证通过的请求中。