在django-rest-framework中防止来自单个用户的同时请求

时间:2018-04-28 10:36:46

标签: django-rest-framework

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

2 个答案:

答案 0 :(得分:1)

您可能将节流阀设置为每x秒仅允许一个请求,以使用户无法向该按钮发送垃圾邮件,我没有用过它,但是根据文档,它可能是您所需要的。

来源: https://www.django-rest-framework.org/api-guide/throttling/#throttling

答案 1 :(得分:0)

这将违反RESTful概念,即服务器上的REST API调用之间保持no session state;所有州都由客户维护。也许您可以创建代码idempotent,以便多个提交将根据上次通过GET检索的内容来设置值。我假设您的用户正在更新的资源被识别为他们的资源(例如,给定用户的属性)。您还可以考虑使用202 Accepted响应将某些内容发布到队列,然后由另一个实现您喜欢的策略的进程排空队列。这将要求客户端使用另一个GET进行轮询以了解结果。