使用名为“security_hash”的HiddenInput字段获取错误
在documentation中,我在模板中使用了{{form}},这些值会自动创建
但我没有使用模板,而只是使用POST数据的注释/帖子/端点,如下所示:
如何在没有此额外视图的情况下获取security_hash值作为POST值传递?
编辑:我认为将{{form.security_hash}}值从模板/视图传递到幕后的表单是可能的,也是可取的,这样就可以避免这个错误。
Edit2:为了澄清,有问题的security_hash字段是shown here in code,security_hash值看起来好像是从'initial_security_hash'函数生成的,该函数使用content_type, object_pk
和timestamp
字段来生成在第73行生成哈希,在第69行调用此函数。
由于这个原因,我也进一步混淆了为什么我的传入未被接受,因为我传递了content_type, object_pk
和timestamp
字段
答案 0 :(得分:2)
这种情况正在发生,因为安全哈希是从实例化的CommentSecurityForm
生成的。然后,安全哈希值作为隐藏字段包含在内,并通过POST请求传回,此时验证它。
即使您将content_type
,object_pk
和timestamp
字段传递给请求,也没关系,因为您需要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_type
,object_pk
,timestamp
,security_hash
。然后,您需要将这些值传递给POST请求启动的任何上下文,并将它们包含在要通过安全验证的请求中。