python - Django:有没有办法防止一个 View 被同时调用两次?

标签 python django

我们的 Django 应用程序中有一些功能可以显示一个链接来刷新来 self 们的版本控制系统的一些信息。这只是一个链接,当他们点击该 URL 时,将执行转到版本控制、获取信息、检查数据库和更新数据库的操作。

最近我们有一位用户为一项 Assets 点击了“刷新”按钮两次。这导致 URL 被命中两次,因此操作执行了两次,最终在我们的数据库中创建了一个重复的条目。

我们需要做一些事情来消除用户点击该按钮两次的可能性。我们应该从链接移动到 javascript 按钮吗?我们是否应该在第一次点击发生时立即在 request.session 中设置一些标志,然后在完成时取消设置,并在执行刷新时始终检查该标志?这只是两个看似可行的想法,但我真的不知道。

最佳答案

你应该使用 POST 请求并在它之后重定向,真的。

此外,为了防止双重提交,您可以采用类似以下问题的解决方案:Does a library to prevent duplicate form submissions exist for django? .您可以在 request.session 中存储一个键 refreshing_vcs 并在您的 View 中检查它的值。如果数据已经在刷新,那么您可以将用户重定向到另一个页面并告诉您稍等。

完全另一种方法是设置一个 django-celery 任务(或简单地使用 cron)以定期自动执行更新,但我不知道它是否符合您的要求。

关于python - Django:有没有办法防止一个 View 被同时调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499096/

相关文章:

python - 从已编译的 CPython 中删除文档字符串但不删除断言

python Django : pre-select dropdown of custom field

javascript - AngularJS 和 Django 的 DOM、JavaScript 和服务器端数据库之间是否有任何三向数据绑定(bind)框架?

python - 通过Asyncio解决阻塞http python函数

python - 从维数未知的 numpy 数组中提取超立方 block

python - OpenCV:如何使用cv2.CascadeClassifier获得功能?

python - blender :在球体周围走动

python - Django 中的原始 SQL 查询

javascript - Django/Ajax 不刷新

python - Django 如何使表单字段可选