首页 > 解决方案 > 防止来自 django-rest-framework 中单个用户的同时请求

问题描述

用户通过意外单击按钮两次和向 Web 服务器发送垃圾邮件以获得更多积分,从而导致关键数据处理的竞争条件。我正在考虑在请求处理开始时使用某种每用户锁定来防止数据损坏和服务器过载。问题是请求处理是分布在机器之间的。

标签: django-rest-framework

解决方案


这将违反 RESTful 概念,即服务器上的 REST API 调用之间没有维护会话状态;所有状态都由客户端维护。也许您可以使您的代码具有幂等性,以便多次提交将根据上次通过 GET 检索到的内容来 PUT 值。我假设您的用户正在更新的资源被标识为他们的(例如给定用户的属性)。您还可以考虑使用 202 Accepted 响应将某些内容发布到队列中,然后队列被另一个执行您喜欢的策略的进程耗尽。这将要求客户端使用另一个 GET 进行轮询以了解结果。


推荐阅读