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

标签 javascript python django ajax

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

这是用户尝试执行的操作

  1. 用户在搜索栏中搜索产品列表。
  2. 结果显示后,系统会显示一个按钮,用于触发每个产品的操作。他们还会看到一个主按钮,可以为列出的每个产品触发相同的操作。
  3. 点击按钮后,我想将其禁用 30 秒,并在页面刷新和浏览器关闭时保持此状态。

我做了什么

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

我认为需要发生的事情

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

几个问题

  1. 这只是为按钮创建模型然后像平常一样查询数据库的问题吗?
  2. 如何让 Django 在 30 秒后更新数据库以使按钮的状态从禁用状态恢复为启用状态?
  3. 当用户按下按钮时,它会将其禁用,但只会在数据库中将其禁用。在客户端不刷新页面的情况下实际禁用按钮的正确方法是什么?我是否只需在 javascript 中禁用该按钮 30 秒,然后如果他们尝试刷新页面,那么 View 将看到对产品列表的请求,并且它将检查数据库中每个按钮的状态,并且它将正确服务该按钮?

非常感谢您的帮助!!

最佳答案

Is it just a matter of creating a model for the buttons and then querying the database like normal?

模型可能类似于Button(_id,last_clicked作为时间戳,user_id) 查询时,您可以简单地按 timestampLIMIT 1 排序以获得最后一次点击。通过不覆盖原始值,可以确保写入速度更快。

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

How do I have Django update the database after 30 seconds to make a button's status go from disabled back to enabled?

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

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

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

When the user presses the button it's going to make it disabled, but it will only be making it disabled in the database. What is the proper way to actually disable the button without a page refresh on the client side? Do I just disable the button in javascript for 30 seconds, and then if they try to refresh the page then the views will see the request for the list of products and it will check the database for each button's status and it will serve the button correctly?

您需要执行一个 POST 请求来与数据库传达按钮按下时间戳。您还需要确保 POST 请求成功,因为在浏览器关闭的情况下,不成功的请求不会保留数据。 完成上述两项操作后,您可以仅从客户端禁用该按钮,而无需尝试获取按钮 last_clicked 时间戳。

关于javascript - 如何在 Django 服务器上存储有关前端按钮的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821634/

相关文章:

javascript - 使用 React.js 检查属性是否存在

javascript - 如何在 ${variable} 的每个实例上拆分 ``(反引号字符串)

javascript - 使用鼠标滚轮垂直滚动幻灯片

python - Argparse 位置参数和可选参数的顺序不正确

python - 关于 PyClass_Check 和 PyClass_IsSubclass 函数的一些混淆

python - 我不明白为什么我会收到 unboundLocalError

Django Select2Widget 无法使用脆皮形式正确设置样式

javascript - 如何在 fullcalendar 中解析 json 格式的事件?

python - 在 qgis 插件中设置代理参数。如何

python - 如何在django中制作像google表单一样的表单?用户可以在哪里根据需要添加或删除字段?用户最多可以添加10-20个字段?