如何在Django中的每个save()之后推迟一个方法?

时间:2015-10-16 17:30:14

标签: python django django-models django-celery

我正在使用Django 1.8.4。有Link模型,可让用户添加指向网站的链接。然后我使用pyfav从插入的URL中获取favicon。我在我的save()方法中调用了get_favicon_url方法,因此导致等待很长时间才能保存对象并重定向到成功URL。

models.py

from pyfav import get_favicon_url

class Link(models.Model):
    url         = models.URLField("URL")
    ...

    def save(self, *args, **kwargs):
        ...
        self.favicon = get_favicon_url(self.url)
        super(Link, self).save(*args, **kwargs)

现在我正在寻找一种方法,可以在链接保存并重定向到成功视图后推迟self.favicon = get_favicon_url(self.url),因为它不是一个非常重要的字段需要填写可以在链接保存几秒后在后台完成。

这种工作是用Celery完成的吗?如果有任何提示如何实施它将不胜感激,因为我没有任何经验。

1 个答案:

答案 0 :(得分:1)

Celery之类的任务调度程序与任务队列一起使用,并延迟处理图标。

我为这个http://mpcabd.igeex.biz/python-celery-asynchronous-task-decorator/做了一个python装饰器,它可以帮助你理解它是如何工作的,如果你使用这个装饰器,你可以让你的代码清晰,不会重复它恕我直言。