我目前正在开发一个使用亚马逊产品 API 来获取书籍信息的网络应用程序。我使用的 Book 模型仅包含 ASIN amazon 识别码,看起来有点像这样:
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 查询集文档在定制方面非常神秘且缺乏。这肯定不是一个罕见的用例。
任何人都可以提供处理此类问题的惯用方式,或有关该主题的良好资源吗?