繁体   English   中英

如何在Django服务器上存储有关前端按钮的信息?

[英]How do I store information about a front-end button on the Django server?

基本上,我想在服务器端存储一个按钮服务,这样它就可以通过关闭浏览器和刷新页面而保持不变。

这是用户正在尝试做的

  1. 用户在搜索栏中搜索产品列表。
  2. 当结果显示出来时,将为他们显示一个按钮,该按钮触发每个单独产品的操作。 它们还显示有一个主按钮,可以为列出的每个产品触发相同的操作。
  3. 单击该按钮后,我想禁用它30秒钟,并通过刷新页面和关闭浏览器使其保持不变。

我做了什么

目前,我已经在客户端使用AJAX调用实现了此功能,但是如果页面刷新,它将重置按钮,他们可以再次单击它。 因此,我研究了使用javascript的localStorage函数,但就我而言,最好将其存储在服务器上。

我认为需要发生的事情

  1. 在我的Django应用中为按钮创建模型。 它的属性将是其状态,也可能是一些元数据(最后点击等)。
  2. 每当客户请求产品列表时,视图将发送产品列表,并且能够查询数据库中相应按钮的状态,并直接在模板中实现禁用的属性。
  3. 如果可以按下该按钮,则客户端将对服务器进行AJAX POST调用,服务器将检查按钮状态。 如果可用,它将执行操作,将按钮状态更新为禁用30秒钟,然后将此信息发送回客户端以在DOM中反映出来。

几个问题

  1. 仅仅是为按钮创建模型,然后像往常一样查询数据库吗?
  2. 我如何让Django在30秒后更新数据库,以使按钮的状态从“禁用”变回“启用”?
  3. 当用户按下按钮时,它将被禁用,但是只会在数据库中将其禁用。 在客户端不刷新页面的情况下,真正禁用按钮的正确方法是什么? 我是否仅禁用javascript中的按钮30秒钟,然后如果他们尝试刷新页面,则视图将看到对产品列表的请求,它将检查数据库中每个按钮的状态,并将正确地提供按钮?

非常感谢你的帮助!!

仅仅是为按钮创建模型,然后像往常一样查询数据库吗?

模型可能类似于Button (_id, last_clicked as timestamp, user_id)查询时只需按timestampLIMIT 1进行排序即可获得最终点击。 通过不覆盖原始值,可以确保更快的写入速度。

如果您不希望每个用户的按钮都具有相似的行为,则必须创建一个按钮与单击该按钮的用户的映射。 即使您当前的需求不需要它们,也可以创建一个可扩展的解决方案,其中使用该表映射用户非常容易。

我如何让Django在30秒后更新数据库,以使按钮的状态从“禁用”变回“启用”?

我避免在没有客户端请求映射到更改的情况下更改数据库。 这样可以确保并发和访问控制。 并且对于当前数据状态也具有更高的可预测性。 之后,我建议不要在时间增量(30秒)之后更新数据库。

取而代之的是,您可以简单地比较last_clicked时间戳并在发送响应之前在服务器端或在客户端计算出增量。

考虑客户端在其系统上的时间与服务器上的时间不同的情况,此决定可能很重要。

当用户按下按钮时,它将被禁用,但是只会在数据库中将其禁用。 在客户端不刷新页面的情况下,真正禁用按钮的正确方法是什么? 我是否仅禁用javascript中的按钮30秒钟,然后如果他们尝试刷新页面,则视图将看到对产品列表的请求,它将检查数据库中每个按钮的状态,并将正确地提供按钮?

您需要执行POST请求,以将按钮按下时间戳记与数据库进行通信。 您还需要确保POST请求成功,因为如果关闭浏览器,失败的请求将不会保留数据。 完成上述两个操作后,您可以仅从客户端禁用按钮,而无需尝试获取按钮last_clicked时间戳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM