我只希望有人确认我正在以正确的方式做事。
我有这个结构: 有章节的书(祖先=书)有页面(祖先=章节)
我很清楚,要按 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)
实际上,当我需要搜索页面以显示其内容时,我在 url 中传递完整的链,如下所示:
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,不是 fetch 命令)。我的假设正确吗?