Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django/Python中的日常进程_Python_Django_Python 2.7 - Fatal编程技术网

Django/Python中的日常进程

Django/Python中的日常进程,python,django,python-2.7,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

我有一个从某个站点获取美元当前货币的函数:

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\u currency
需要几秒钟才能从服务器获取货币,而且我不希望每次客户购买东西时都使用它,您可以通过CLI中的或Django中的来安排日常任务。 我建议您遵循以下步骤:

  • 从设置文件中存储数据(存储在db或JSON文件或XML文件中)
  • 例如,运行
    update\u currency
    功能的
    update\u currency
  • 制作一个CRON文件或设置芹菜,以便在几天中的特定时间运行
    /manage.py update\u 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)
        ...
    
    通过OnSave方法,在以后的时间内最多只能有一个实例



    同样感谢@martinarroyo,这个项目非常完美,非常有用。

    看看,它可能适合您的目的。该服务器的响应是JSON。使用
    json.loads()
    来解析它,而不是
    ast.literal\u eval
    。请解释一下,为什么我不应该在设置文件中存储货币?这只是一个浮点值。这项建议的后端逻辑是将外部数据保留在硬代码之外,这样您的代码就更可靠了。如果我将其存储在数据库中,有两种方法:或使用一个字段创建新模型,或将此字段添加到现有模型中,但这样会有与模型实例一样多的货币字段。有什么更好的方法?发布更新。。。您的答案在更新部分:-)这是一个单例模式吗?