python - Django 注释 security_hash

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

名为“security_hash”的 HiddenInput 字段出现错误

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

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

enter image description here

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

编辑:我想是否可以并且建议将 {{ form.security_hash }} 值从模板/ 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 字段传递给请求,也没关系,因为您需要在提交 POST 请求之前具有 security_hash 值。

查看此处的文档 - 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 请求的任何上下文,并将它们包含在请求中以通过安全验证。

关于python - Django 注释 security_hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349034/

相关文章:

python - 根据 3 个变量的颜色 - 麦克斯韦三角形

django - 如何在 Django 管理员中为模型字段使用自定义表单字段?

python - 如何在 django-rest-framework 中序列化具有自定义关系的 2 个模型?

python只将最后的输出写入文件

python - 你在 django 中有哪些身份验证选项?

python - 为什么 DRF 可浏览 API 对每个实际请求的多个请求类型运行权限检查?

django - 如何使用 django-rest-framework 保存外键

json - JSONRenderer无法序列化:b'{“id”:“11122211133311”}}不可JSON序列化

python - 在一个线程中拥有deque和Queue的优点

python - django reg extend - 当前事务被中止,命令被忽略直到事务 block 结束