1
我只希望有人確認我正在以正確的方式做事。與GAE的祖先合作
我有這樣的結構:有章(祖先=書)有網頁圖書(祖先=章)
顯然對我來說,要搜索的ID一章,我需要的書由祖先查詢搜索。
我的疑問是:我是否需要所有的連鎖書籍章節來搜索一個頁面?
例如(我在NDB):
class Book(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id):
return Book.get_by_id(long(id))
class Chapter(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, book):
return Chapter.get_by_id(long(id), parent=book.key)
class Page(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, chapter):
return Page.get_by_id(long(id), parent=chapter.key)
事實上,當我需要搜索頁面顯示其內容,我傳遞的完整鏈條在這樣的網址:
?GETPAGE BOOKID = 5901353784180736 & chapterId = 5655612935372800 & PAGEID = 1132165198169
所以,在控制器中,我有這樣的:
def get(self):
# Get the id parameters
bookId = self.request.get('bookId')
chapterId = self.request.get('chapterId')
pageId = self.request.get('pageId')
if bookId and chapterId and pageId:
# Must be a digit
if bookId.isdigit() and chapterId.isdigit() and pageId.isdigit():
# Get the book
book = Book.by_id(bookId)
if book:
# Get the chapter
chapter = Chapter.by_id(chapterId, book)
if chapter:
# Get the page
page = Page.by_id(pageId, chapter)
這是正確的方法嗎?我是否必須始終使用URL中的完整鏈來獲取鏈的最終元素?
如果這是正確的,我想這種使用NDB的工作方式不會對數據存儲產生任何影響,因爲對這個頁面的重複調用總是碰到同一本書,章節和頁面的NDB緩存(因爲我正在通過ID獲取,不是獲取命令)。我認爲是正確的嗎?
嗯,所以我仍然需要通過每個頁面請求保存URL中的所有鏈,但是我可以將3個對數據庫的調用減少到只有1個。是這樣嗎?我之前已經閱讀過文檔,但在使用Keys方面對我來說不太清楚(可能我不太瞭解)。最後,你認爲我必須改變我的by_id方法直接使用bookId來傳遞書籍實例嗎?感謝您的迴應。 – Eagle
如果你不想在URL中單獨傳遞整個鏈,你可以使用'page_key.urlsafe()',它將整個事物編碼成一個(長)字符串。 –
我不明白你關於by_id方法的問題:雖然我必須說我根本不明白by_id方法的意義,因爲他們只是調用get_by_id,你可以直接輕鬆地做。 –