나는 누군가 내가 올바른 방법으로 일을하고 있음을 확인하기를 원합니다.GAE에서 조상과 함께 작업
내가이 구조를 가지고 : 페이지 수있는 장 (조상 = 책)이 책 (조상 = 장)
ID로 장을 검색 할 것을 나를 위해 분명하다을, 나는에 책을 필요로 조상 쿼리로 검색하십시오.
의심 할 여지가 있습니다. 페이지를 검색 할 때 모든 체인 북 장이 필요합니까?
예를 들어 (I는 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 & 페이지 id = 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를 사용하여이 작업 방법은, (때문에, 데이터 저장소에 영향을주지 않는 것으로 가정 나는 이드에 의해 얻고있다. 가져 오기 명령이 아니다.) 제 생각은 맞습니까?
음, 모든 페이지 요청을 통해 URL의 모든 체인을 저장해야하지만 데이터베이스에 대한 3 건의 호출을 1로만 줄일 수 있습니다. 이전에 문서를 읽었지 만 Keys 사용에 관해서는 분명하지 않습니다 (어쩌면 잘 이해하지 못할 수도 있습니다). 마지막으로 book 인스턴스를 전달하는 대신 bookId를 직접 사용하려면 by_id 메서드를 변경해야한다고 생각합니까? 응답 해 주셔서 감사합니다. – Eagle
전체 체인을 URL에서 개별적으로 전달하고 싶지 않은 경우 전체를 하나의 (긴) 문자열로 인코딩하는'page_key.urlsafe()'를 사용할 수 있습니다. –
그리고 by_id 메서드에 대한 귀하의 질문을 이해하지 못합니다. 비록 내가 그냥 by_id 메서드의 요점을 전혀 이해하지 못한다고 말해야합니다. 그냥 get_by_id를 호출하기 때문에 쉽게 직접 할 수 있습니다. –