Django 评论 security_hash

Django comments security_hash

在名为 "security_hash" 的 HiddenInput 字段中出现错误

它在 documentation 中说如果我在我的模板中使用 {{ form }} 这些值会自动创建

但我没有使用模板,而只是 comments/post/ 端点和 POST 数据如下:

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

编辑:我在想是否可以将 {{ form.security_hash }} 值从 template/view 传递到幕后的表单,这样就可以避免这个错误。

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

因此,我也更加困惑为什么我在 content_type, object_pktimestamp 字段中传递时不接受我的输入

发生这种情况是因为安全散列是从实例化的 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 请求发起的任何上下文,并将它们包含在请求中以通过安全验证。