DB에 어떤 작업을 하고난 이후 (또는 하기전에) 어떤 다른 작업이 자동으로 실행되도록 프로그래밍 할때 Hook를 사용한다.
간단한 사용법은 ndb.Model 클래스에 정의된 hook 함수를 오버라이드 하면 된다.
hook 함수 목록은 아래와 같다.
@classmethod def _pre_allocate_ids_hook(cls, size, max, parent): @classmethod def _post_allocate_ids_hook(cls, size, max, parent, future): @classmethod def _pre_delete_hook(cls, key): @classmethod def _post_delete_hook(cls, key, future): @classmethod def _pre_get_hook(cls, key): @classmethod def _post_get_hook(cls, key, future): def _pre_put_hook(self): def _post_put_hook(self, future):
함수 명만 봐도 대충 알거 같다.
사용 예
Account를 입력하고 삭제할 때 마다 Event를 기록하는 Hook를 작성해보자
# Event 모델을 정의하고 class Event(ndb.Model): kind = ndb.StringProperty() event = ndb.StringProperty() desc = ndb.StringProperty() # Account 모델에 Hook를 정의하자 class Account(ndb.Model): username = ndb.StringProperty() userid = ndb.IntegerProperty() email = ndb.StringProperty() def _post_put_hook(self, future): e = Event(kind='Account', event='put', desc='put ' + str(self.userid)) e.put() @classmethod def _pre_delete_hook(cls, key): e = Event(kind='Account', event='del', desc='delete ' + str(key.get().userid)) e.put() sally = Account() sally.populate(username='Sally', userid=456, email='sally@gmail.com', key=ndb.Key('Account', 'Sally1')) #sally를 만들었다 지우면 입력 데이터와 삭제 데이터가 입력됨을 확인 할 수 있다. sally_key = sally.put() sally_key.delete()
Google App Engine Console에서 확인해보면 잘 돌아가는 것을 알 수 있다.
반응형
'Dev. > Google App Engine' 카테고리의 다른 글
Datastore - NDB API(Python) : 데이터 조회 하기(Query) (0) | 2013.08.31 |
---|---|
Datastore - NDB API(Python) : Property Type (0) | 2013.08.23 |
Datastore - NDB API(Python) : Entity의 구조를 정확히 모를때 (동적 Entity) (0) | 2013.08.21 |
Datastore - NDB API(Python) : Key를 이용한 데이터 삭제 (0) | 2013.08.16 |
Datastore - NDB API(Python) : Key를 이용한 데이터 조회 (0) | 2013.08.15 |