배경App Engine은 (파이썬) 데이터 저장소 Precall API 후크
는 그래서 내가 GAE에 대한 응용 프로그램을 만들고있어 가정 해 봅시다, 나는 API Hooks를 사용하고 싶습니다.
큰 수정 : :이 질문의 원래 버전에서는 사용 사례에 대해 설명했지만 일부 사람들은 API 후크에 적합하지 않다고 지적했습니다. 수여 됨! 내가 도와 줬다고 생각해. 하지만 지금은 제 문제가 학문적입니다. 실제로 나는 후크를 사용하는 방법을 여전히 모르고 있으며, 나는하고 싶습니다. 내 질문을 다시 작성하여 훨씬 더 일반적인 것으로 만들었습니다.
코드
그래서 내가 만드는이 같은 모델 :
class Model(db.Model):
user = db.UserProperty(required=True)
def pre_put(self):
# Sets a value, raises an exception, whatever. Use your imagination
그리고 나는 db_hooks.py 만들 :
from google.appengine.api import apiproxy_stub_map
def patch_appengine():
def hook(service, call, request, response):
assert service == 'datastore_v3'
if call == 'Put':
for entity in request.entity_list():
entity.pre_put()
apiproxy_stub_map.apiproxy.GetPreCallHooks().Append('preput',
hook,
'datastore_v3')
존재 TDD-썩는을, 나는이 모든 것을 GAEUnit을 사용하고있다. 그래서 gaeunit.py에서 t 바로 위에있다. 그는 주요 방법, 내가 추가 :
import db_hooks
db_hooks.patch_appengine()
그리고 나서 나는 인스턴스를 만들고 모델을 넣는 테스트를 쓴다.
patch_appengine()
동안
가 확실히 호출되는 질문, 후크는하지 않습니다. 내가 뭘 놓치고 있니? pre_put 함수가 실제로 호출되도록하려면 어떻게해야합니까?
아, 네가 절대적으로 옳다. 그렇다면 계정 당 고유성을 적용하는 것은 어떻습니까? 풋볼 전에 확인해 봤으면 좋겠어? –
고유성을 적용하려면 데이터 저장소에 엔터티를 만드는 첫 번째 put 전에 확인해야합니다. 사용자가 해당 값을 변경하지 못하도록하면 (좋은 생각입니다) 작성을 확인하기 만하면됩니다. –
사실, 그리고 두 경우 모두, 내가 넣기 전에 원하는 검사와 업데이트를 작성한 다음 put() 대신에 사용하는 메소드를 작성하려고합니다. 고맙습니다. –