首页 > 解决方案 > Django celery 任务 api 调用

问题描述

我建立了 rss 聚合站点,并尝试调用 iframely.com 来获取我的 rss 对象条目的图像(我将每个条目都保存在数据库中)。

但是,当我为此添加 celery 任务时,rss 聚合器没有获得新条目并且什么也没发生,0 错误。任务不运行。

我的代码:

class Post(models.Model):

    # an entry in a feed
    
    source        = models.ForeignKey(Source, on_delete=models.CASCADE, related_name='posts')
    title         = models.TextField(blank=True)
    body          = models.TextField()
    link          = models.CharField(max_length=512, blank=True, null=True)

...

def save(self, *args, **kwargs):
    from .tasks import save_thumbnail_url
    if not self.image_url:
        self.image_url = save_thumbnail_url.delay(self.id)
    super(Post, self).save(*args, **kwargs)

我也尝试过 post_save 信号,效果相同。

任务:

def get_thumbnail_from_url(post: Post):
    if not post.image_url:
        req = requests.get('https://iframe.ly/api/oembed?url=' + post.link + '&api_key=493c9ebbdfcbdac2a10d6b')
        thumbnail_url = req.json()['thumbnail_url']
        post.objects.filter(id=post.id).update(image_url=thumbnail_url)

@shared_task
def save_thumbnail_url(post_id: int):
   get_thumbnail_from_url(Post.objects.get(id=post_id))

标签: djangodjango-modelscelerydjango-celery

解决方案


推荐阅读