And*_*rew 2 python django python-2.7
我有一个函数从某个站点获取当前美元货币:
def update_currency(request):
import urllib2
import ast
from django.conf import settings
s = urllib2.urlopen('https://api.privatbank.ua/p24api/pubinfo?exchange=&json&coursid=11').read(1000)
data = ast.literal_eval(s) #parse string list to list
settings.CURRENCY_USD = float(data[2]['sale'])
return redirect(reverse('manager_page'))
Run Code Online (Sandbox Code Playgroud)
经理按下按钮更新货币.但是,如果经理忘记这样做,那么货币就不是实际的了.所以我需要在某个时间每天调用一次这个函数.怎么实现呢?
我正在节省货币settings.py,因为这种方法update_currency需要几秒钟才能从服务器获得货币,而且每次客户购买时都不需要它
您可以通过CLI中的CRON或Django中的Celery来安排例行任务.我建议你遵循以下步骤:
update_currency运行update_currency函数../manage.py update_currency在特定时间内运行命令.更新: 如果您想在数据库中存储数据,您可以创建新模型并在此模型与其他模型之间建立一对多关系,我建议您覆盖此模型的保存方法,如下所示:
class Currency(models.Model):
value = models.IntegerField()
...
def save(self, *args, **kwargs):
if Currency.objects.all().count() > 0 and self != Currency.objects.all()[0]:
obj = Currency.objects.all()[0]
obj.value = self.value
obj.save(*args, **kwargs)
else:
super(Currency, self).save(*args, **kwargs)
...
Run Code Online (Sandbox Code Playgroud)
通过保存方法,您在下次最多只能有一个实例.
同样感谢@martinarroyo,django-priodically项目非常完美,非常有用.