現在、Amazon Product API を使用して書籍の情報を取得する Web アプリを開発しています。次のような ASIN アマゾン識別コードのみを含む Book モデルを使用します。
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
これはテストには十分に機能しますが、将来の使用のために、より堅牢なシステムが必要です。
私が本当にやりたいことは、クエリ セットを使用して検索を実行できるようにして、頻繁にアクセスされる結果をキャッシュできるようにすることです。現状では、書籍の詳細ビューをリクエストするたびに、新しい amazon API 呼び出しが作成されます。すべての API 呼び出しがデータベース呼び出しと一緒にクエリ セット内で処理されれば、私の仕事はずっと簡単になります。残念ながら、Django Query Set のドキュメントは非常にわかりにくく、カスタマイズに関しては不十分であることがわかりました。これは確かにまれな使用例ではありません。
このような問題を処理する慣用的な方法、または主題に関する優れたリソースを提供できる人はいますか?