python - 防止在 Django 中提交多个表单

标签 python django forms hash

我正在寻找一种通用方法来防止多次提交表单。我找到了这个 approach这看起来很有希望。而我不想在我的所有 View 中都包含此片段。使用请求处理器或中间件可能更容易做到这一点。

有什么最佳实践建议吗?

最佳答案

客户端,从 JavaScript 开始。您永远无法信任客户,但这是一个开始。

onclick="this.disabled=true,this.form.submit();

服务器端你“可以”向数据库中插入一些东西,即校验和。如果将其插入到数据库中,请使用 model.objects.get_or_create() 强制数据库级别的唯一性,您应该使用 unique_together。

最后:HTTPRedirect 是最好的,我在用户处理付款时使用的方法是向感谢/确认页面发出 HTTPRedirect()。这样刷新表单就不会重新提交,如果他们返回并尝试再次提交表单(不刷新表单),Django 跨站请求伪造 (CSRF) 将失败,完美!

关于python - 防止在 Django 中提交多个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671335/

相关文章:

python - 我的 def 函数出了什么问题?如何修复它?

python - 如何使用 Django-MongoDB 引擎根据模型上 DictField 中的字典内容进行过滤?

python - Django - 用户只能投票一次

javascript - HTML/Javascript : Send field only if it changed

javascript - 如果您有一个名称为 ="document"的表单,则 JS document.getElementById 不是一个函数

javascript - 如何询问数据库 Google App Engine 中的 .js 文件是否存在

python - 将 tf.Session() 作为 session() : ^ SyntaxError: can't assign to function call

django 调试工具栏无法从虚拟机上的静态 IP 运行

python - 如果我在长度为 1 的 QuerySet 上使用 first() 与 last(),为什么会得到不同的结果

javascript - 提交带有图像的表单,并在弹出窗口中