Django评论security_hash

时间:2015-12-18 05:26:29

标签: python django django-rest-framework django-comments

使用名为“security_hash”的HiddenInput字段获取错误

documentation中,我在模板中使用了{{form}},这些值会自动创建

但我没有使用模板,而只是使用POST数据的注释/帖子/端点,如下所示:

enter image description here

如何在没有此额外视图的情况下获取security_hash值作为POST值传递?

编辑:我认为将{{form.security_hash}}值从模板/视图传递到幕后的表单是可能的,也是可取的,这样就可以避免这个错误。

Edit2:为了澄清,有问题的security_hash字段是shown here in code,security_hash值看起来好像是从'initial_security_hash'函数生成的,该函数使用content_type, object_pktimestamp字段来生成在第73行生成哈希,在第69行调用此函数。

由于这个原因,我也进一步混淆了为什么我的传入未被接受,因为我传递了content_type, object_pktimestamp字段

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为安全哈希是从实例化的CommentSecurityForm生成的。然后,安全哈希值作为隐藏字段包含在内,并通过POST请求传回,此时验证它。

即使您将content_typeobject_pktimestamp字段传递给请求,也没关系,因为您需要security_hash值< em>在提交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请求启动的任何上下文,并将它们包含在要通过安全验证的请求中。