从外部API检索的模型的查询集

时间:2012-11-05 21:51:11

标签: python django api models

我目前正在开发一个使用Amazon Product API获取图书信息的网络应用。我使用的Book模型只包含ASIN亚马逊识别码,看起来有点像这样:

class Book(models.Model):
    asin = models.CharField(max_length-10, unique=True)
    def retrieve(self, **kwargs):
        kwargs['ItemId'] = self.asin
        self.xml = amazon_lookup(**kwargs) # returns BeautifulSoup
    @property
    def title(self):
        try:
            return self.xml.ItemAttriibutes.Author.text
        except AttributeError: # happens when xml has not been populated
            return None
    ...


class BookManager(models.Manager):
    def retrieve(self, **kwargs):
        kwargs['SearchIndex'] = 'Books'
        book_search = amazon_search(**kwargs)
        books = []
        for item in book_search:
            book = self.get_or_create(asin=item.ASIN.text)[0]
            book.xml = item
            books.append(book)
        return books

然后我可以用

来调用它
b = Book.objects.retrieve(Keywords="foo bar")
b.retrieve(ResponseGroup="Images,ItemAttributes,...")
t = b.title

这适用于测试,但我想要一个更强大的系统供将来使用。

我真正想做的是能够使用查询集执行搜索,以便可以缓存经常访问的结果。就目前而言,每次对书籍详情视图的请求都会创建一个新的亚马逊API调用。如果在数据库调用旁边的查询集内处理所有API调用,我的工作会轻松得多。不幸的是,我发现Django Query Set文档非常神秘,而且在定制方面缺乏。这肯定不是一个罕见的用例。

任何人都可以提供处理此类问题的惯用方法,或提供有关该主题的良好资源吗?

0 个答案:

没有答案