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

Javascript 如何在Django服务器上存储有关前端按钮的信息?,javascript,python,django,ajax,Javascript,Python,Django,Ajax,基本上,我想在服务器端存储一个按钮服务,这样它可以通过浏览器关闭和页面刷新来保持 以下是用户尝试执行的操作 用户在搜索栏中搜索产品列表 当结果显示时,会显示一个按钮,用于触发每个产品的操作。它们还显示一个主按钮,可以为列出的每个产品触发相同的操作 单击按钮后,我想将其禁用30秒,并在页面刷新和浏览器关闭期间保持此状态 我所做的 目前,我在客户端使用AJAX调用实现了这一点,但是如果页面刷新,它会重置按钮,然后他们可以再次单击它。因此,我研究了使用javascript的localStorage函数

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

以下是用户尝试执行的操作

  • 用户在搜索栏中搜索产品列表
  • 当结果显示时,会显示一个按钮,用于触发每个产品的操作。它们还显示一个主按钮,可以为列出的每个产品触发相同的操作
  • 单击按钮后,我想将其禁用30秒,并在页面刷新和浏览器关闭期间保持此状态
  • 我所做的

    目前,我在客户端使用AJAX调用实现了这一点,但是如果页面刷新,它会重置按钮,然后他们可以再次单击它。因此,我研究了使用javascript的localStorage函数,但在我的情况下,最好将其存储在服务器上

    我认为需要发生的事情

  • 在我的Django应用程序中为按钮创建模型。它的属性可能是它的状态,也可能是一些元数据(最后一次单击等)
  • 每当客户机请求产品列表时,视图都会发送产品列表,并且能够查询数据库中相应按钮的状态,并直接在模板中实现禁用属性
  • 如果可以按下按钮,那么客户端将向服务器发出AJAX POST调用,服务器将检查按钮状态。如果可用,它将执行操作,将按钮状态更新为禁用状态30秒,然后将此信息发送回客户端,以便在DOM中反映出来
  • 几个问题

  • 是否只是为按钮创建一个模型,然后像平常一样查询数据库
  • 如何让Django在30秒后更新数据库,使按钮的状态从禁用变回启用
  • 当用户按下按钮时,它将使其处于禁用状态,但它只会使其在数据库中处于禁用状态。在客户端不刷新页面的情况下,禁用按钮的正确方法是什么?我是否只是在javascript中禁用按钮30秒,然后如果他们尝试刷新页面,那么视图将看到对产品列表的请求,它将检查数据库中每个按钮的状态,并正确地为按钮提供服务
  • 非常感谢你的帮助

    只是为按钮创建一个模型,然后 像平常一样查询数据库

    模型可能类似于
    按钮(\u id,上次单击作为时间戳,用户id)
    查询时,只需按
    时间戳
    限制
    1进行排序,即可获得最后一次单击。通过不覆盖原始值,可以确保更快的写入速度

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

    我如何让Django在30秒后更新数据库以进行更新 按钮的状态从禁用变回启用

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

    相反,您可以简单地比较上次单击的时间戳,并在发送响应之前计算服务器端或客户端的增量

    <>这个决定可能很重要,考虑客户机在系统上的时间不同于服务器时间的情况。

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

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

    禁用按钮30秒的用例是什么?db中的写锁也能达到同样的效果吗?@SaurabhAriyan我不确定我是否完全理解你的问题,但我会尽力回答。我认为db中的写锁无法实现同样的效果。我甚至不希望用户能够点击按钮,如果它只是在过去30秒内点击。我觉得在你的建议中,他们仍然可以点击它,但它在服务器端没有任何作用。我觉得禁用它会给用户带来良好的反馈,直到时间结束,他们才能再次单击它。按钮禁用功能对每个用户都是独立的吗?如果用户A禁用了按钮,它是否也会禁用用户B的按钮?还有,应用程序中有多少这样的按钮?它只是一个特定的按钮,还是根据产品的数量增长?啊,我明白了,很抱歉。是如果用户A禁用该按钮,则应为所有其他用户禁用该按钮。现在我已经实现了一个数据库存储解决方案,这是一个非常有用的解决方案。我有一个简短的问题