小编Kar*_*bhu的帖子

在将实例保存到数据库之前/之后是否触发了Django post_save?

我有一个使用Django的网站.每个帖子都是一个名为Article的对象.我想在保存后检索帖子的HTML,所以我编写了以下post_save钩子:

@receiver(models.signals.post_save, sender=Article)
def _send_article_mentions(sender, instance, **kwargs):
    import requests
    from django.contrib.sites.models import Site
    from urlparse import urljoin
    from ParallelTransport.settings import ARTICLES_URL
    SITE_URL = 'http://'+Site.objects.get_current().domain
    article_url = urljoin( SITE_URL, instance.get_absolute_url() )
    import time
    time.sleep(20)
    r = requests.get(article_url)
    error_file = open(ARTICLES_URL+'/'+'error.txt','w')
    error_file.write('file started1\n')

    m = r.status_code
    error_file.write(str(m))
    error_file.close()
Run Code Online (Sandbox Code Playgroud)

它基本上等待20秒(作为测试添加)然后尝试使用其URL检索帖子的HTML,并将请求状态代码写入文件以进行调试.

问题是我在第一次保存时总是获得status = 404,它在第二次和后续保存时都有效.我认为Django的工作方式是:

  1. 使用save()将实例保存到数据库.此时帖子会获得一个URL
  2. 发送post_save信号

但后来我应该能够在post_save中检索HTML.我对post_save的理解不正确吗?

补充说明:

  1. 将此代码放在save()方法中不起作用.也不应该.该帖子在save()方法的末尾添加到数据库中,因此在save()结束之前不应该有任何URL.
  2. 这是在生产站点上,而不是在开发服务器上.
  3. 我想使用HTML中的链接发送'pingbacks'或实际webmention.但我的所有pingback都被拒绝了,因为帖子还没有URL.这是最不起作用的最低代码.

python django post save

7
推荐指数
1
解决办法
4578
查看次数

标签 统计

django ×1

post ×1

python ×1

save ×1