基本上,我想在服务器端存储一个按钮服务,以便它可以在浏览器关闭和页面刷新时保持不变。
这是用户要尝试的操作
我做了什么
当前,我已经在客户端使用AJAX调用实现了此功能,但是如果页面刷新,它将重置按钮,他们可以再次单击它。因此,我研究了使用javascript的localStorage函数,但就我而言,最好将其存储在服务器上。
我认为需要发生的事情
几个问题
非常感谢您的帮助!
答案 0 :(得分:1)
仅仅是为按钮创建模型,然后 像平常一样查询数据库?
模型可能类似于Button (_id, last_clicked as timestamp, user_id)
查询时,您只需按timestamp
和LIMIT
1进行排序即可获得最终点击。通过不覆盖原始值,可以确保更快的写入速度。
如果您不希望每个用户的按钮都具有相似的行为,则必须创建与单击该按钮的用户的映射。即使您当前的需求不需要它们,也可以创建一个可扩展的解决方案,其中使用该表映射用户非常容易。
我如何让Django在30秒后更新数据库以使 按钮的状态从禁用状态恢复为启用状态?
我避免在没有客户端请求映射到更改的情况下更改数据库。这样可以确保并发和访问控制。并且对于当前数据状态也具有更高的可预测性。之后,我建议不要在时间增量(30秒)之后更新数据库。
相反,您可以简单地比较last_clicked
时间戳并在发送响应之前在服务器端或在客户端计算出增量。
考虑到客户端在其系统上的时间与服务器上的时间不同的情况,此决定可能很重要。
当用户按下按钮时,它将被禁用,但是 它只会使它在数据库中被禁用。什么是适当的 实际禁用按钮而无需刷新页面的方法 客户端?我只是禁用javascript中的按钮30 秒,然后如果他们尝试刷新页面,则视图将 请参阅要求的产品列表,它将检查 每个按钮状态的数据库,它将为按钮提供服务 正确吗?
您需要执行POST
请求,以将按钮按下时间戳记与数据库进行通信。您还需要确保POST
请求成功,因为如果关闭浏览器,失败的请求将不会保留数据。
完成上述两项操作后,您可以仅从客户端禁用按钮,而无需尝试获取按钮last_clicked
的时间戳。