Django模型 - 自动刷新字段值

时间:2015-11-01 21:37:10

标签: django models

在我的django models.py中,我使用lxml从亚马逊抓取商品的价格。 当我在管理页面点击保存时,它将此价格存储在“价格”字段中,但有时亚马逊价格会发生变化,所以我想每2天自动更新一次价格。这是我现在的职责:

try_create

我真的不知道如何做到这一点,我只希望自动完成

1 个答案:

答案 0 :(得分:2)

隔离同步功能

首先,我将同步功能与保存区分开来,例如您可以创建AmazonItem.sync()方法

def sync(self):
    # Your HTTP request and HTML parsing here
    # Update self.price, self.last_updated etc

带管理命令的Cron作业

现在,您的出发点是在要同步的模型实例上调用.sync()。一个非常粗糙的方法是:

for amazon_item in AmazonItem.objects.all():
    amazon_item.sync()
    amazon_item.save()

你可以,例如将该代码放在名为sync_amazon_items的{​​{3}}内,并设置一个cron作业,每2天运行一次

# app/management/commands/sync_amazon_items.py
class Command(BaseCommand):
    def handle(self, *args, **options):
        for amazon_item in AmazonItem.objects.all():
            amazon_item.sync()
            amazon_item.save()

然后,您可以让您的操作系统或作业调度程序运行它,例如使用python manage.py sync_amazon_items

*这将会非常缓慢,因为它会顺序通过您的列表,任何项目中的错误都会停止操作,所以您需要捕获异常记录它们并继续前进,例如 < / p>

使用任务队列/调度程序

更具性能和可靠性(隔离故障)的方法是将同步作业(例如每个amazon_item的作业或一批N amazon_items)排队到Django Command之类的作业队列中,然后将Celery同意设置为目前运行一些同步作业

要安排Celery的定期任务,请查看Celery