Python 使用Django支持的站点和SQLite以一定速率递增整数的最佳方法是什么?
我试图显示一个从一个非常非常简单的Django数据库调用的数字,它将随着时间的推移而递增。它将使用jinja2模板调用,数字是一个简单的IntegerField() 但是,我希望该数字能够自动递增,在不刷新页面的情况下,在一天中重复多次。此外,我希望每次刷新数字时,都能将新值添加到记录时间和日期的同一数据库中。 实现这一目标的最佳语言/框架组合或组合是什么?Python 使用Django支持的站点和SQLite以一定速率递增整数的最佳方法是什么?,python,django,sqlite,Python,Django,Sqlite,我试图显示一个从一个非常非常简单的Django数据库调用的数字,它将随着时间的推移而递增。它将使用jinja2模板调用,数字是一个简单的IntegerField() 但是,我希望该数字能够自动递增,在不刷新页面的情况下,在一天中重复多次。此外,我希望每次刷新数字时,都能将新值添加到记录时间和日期的同一数据库中。 实现这一目标的最佳语言/框架组合或组合是什么? 我开始认为仅Django和Jinja2还不足以达到这种效果。在不了解全部背景的情况下,我可以看到两种可能的解决方案 1) 在Django视
我开始认为仅Django和Jinja2还不足以达到这种效果。在不了解全部背景的情况下,我可以看到两种可能的解决方案 1) 在Django视图中,加载模型并计算自其开始日期时间起的时间,运行函数计算当前的自动递增数字,并将其添加到视图的上下文中以供显示。然后在浏览器中加载视图后,使用JavaScript自动更新数字。(不是一个非常精确的方法) 2) 您可以创建一个,然后按设定的间隔使用。这将允许您在数据库中存储更改的编号。然后,您可以使用AJAX(类似jQuery的东西可能很容易实现)从Django视图中提取该值,该视图从数据库中提供当前数字。确保AJAX脚本以设定的时间间隔运行 也许这有助于: 下面是他们文档中的一小段代码,每小时运行一次或配置为crontab:
from apscheduler.schedulers.blocking import BlockingScheduler
def some_job():
print "Decorated job"
scheduler = BlockingScheduler()
scheduler.add_job(some_job, 'interval', hours=1)
scheduler.start()
在不了解更多代码的情况下,很难说增量,但我可以建议
number += 1
您可能有这样一个模型来在数据库中存储整数计数器:
class Counter(models.Model):
counter_value = models.IntegerField()
然后,您可以创建此模型的一个实例,并使用Django shell为其提供一个初始值0
:通过运行python manage.py shell
来输入shell,然后在导入计数器
模型后运行以下操作:
Counter.objects.create(counter_value=0)
def increment(request):
counter = Counter.objects.get(pk=1)
counter.counter_value += 1
counter.save()
然后创建一个增加计数器的视图(导入计数器
模型后):
然后为该视图创建一个url
(导入相应的视图后)
:
现在,您可以在服务器上运行一个简单的Python脚本来请求上面的url,并使计数器每一小时递增一次,例如。脚本可能如下所示:
import time
import requests
while True:
request.get('http://your-website-url/increment-counter')
time.sleep(60*60) # 1 hour
这需要安装请求包
之后,您可以在服务器上运行此脚本(python3/path/to/script
),以实现您想要的功能
我保持简单。但是,您可以增加复杂性以满足您的需求。您还可以在系统启动时运行Python脚本,并且可以向其添加更多功能
注意:我还没有测试上面的代码,但我认为它很简单,可以正常工作。是什么控制了这个数字?您需要每小时增加一个值,还是基于访问量?请提供更多有关自动递增编号的意义的上下文。@Nostalg.io它基于一个静态函数。所以它是一个常数加法函数,可以随时间增加一个简单的值。也许是“+1每x小时”。看起来第二个选项更可行,但是的,这与我所寻找的东西相似;我只需要大致的指导,谢谢!谢谢你的意见。最重要的是没有测试它的免责声明;不过,我会尝试一下,看看它是如何工作的!
import time
import requests
while True:
request.get('http://your-website-url/increment-counter')
time.sleep(60*60) # 1 hour