python - Django/Python 中的日常流程

标签 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'))

经理按按钮更新货币。但如果经理忘记这样做怎么办,那么货币就不是实际的。所以我需要每天在某个时间调用这个函数一次。如何实现?

我正在将货币保存在settings.py中,因为此方法update_currency需要几秒钟才能从服务器获取货币,而且我不希望每次都这样顾客买东西

最佳答案

您可以通过CRON安排日常任务CLI 中的 Celery 在 Django 中。 我建议您按照以下步骤操作:

  1. 将数据存储在设置文件之外(存储在数据库或 JSON 文件或 XML 文件中)
  2. Make a Django management instruction例如运行update_currency函数update_currency
  3. 制作一个 CRON 文件或设置 celery,以便在一天中的特定时间运行 ./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)
    ...

通过保存方法,您下次最多只能有一个实例。


感谢@martinarroyo,django-priodically项目非常完美,非常有用。

关于python - Django/Python 中的日常流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30367153/

相关文章:

python - Django的filesizeformat的使用方法

mysql - 每月最新条目

python - 使用 django-import-export 导出并显示相关对象的详细名称

python - 如何使用python发送nc类似命令?

python - 有没有办法使用 Python-C API 调整 python 列表的大小?

python - 让 sphinx 使用 setup.py 中的版本

python - Pandas 重命名多个 NaN 列名称

python - Matplotlib 中等高线下方的网格线

python - 建议的字符串比较时间复杂度

python - 如何在 Django 字段中使用多个小部件?