데이터 저장을 위해 ndb
을 사용하는 App Engine에서 실행중인 웹 서버가 있습니다. 데코레이터 구현으로 인해 데이터베이스 모델에 대한 크로스 토크
@acl
class MyModel(ndb.Model):
...
access_control = ndb.JsonProperty(default={})
내가 몇 가지 액세스 제어 방법과 내 모델을 확대하기 위해
@acl
장식을 사용
데이터 모델은 다음과 같이 보입니다. 데코레이터이 같은 같습니다
>>> mdl = MyModel(...)
>>> mdl.grant("someone", "creds")
ACL before: {}
ACL after: { < properly populated access_control > }
을하지만 그 대신 나는이 비슷한 얻을 : 내 응용 프로그램에서
def acl(model):
def grant(self, subject, credentials):
logging.debug("ACL before: {}".format(self.access_control))
self.access_control[subject] = { ... } # Set correct value.
logging.debug("ACL after: {}".format(self.access_control))
model.grant = grant
...
...
을, 그때 같이 호출 기대
>>> mdl1 = MyModel(...)
>>> mdl1.grant("someone", "creds")
ACL before: {}
ACL after: { < properly populated access_control > }
>>> mdl2 = MyModel(...)
>>> mdl2.grant("someone else", "other creds")
ACL before: { < values from mdl1 > }
ACL after: { < values from mdl1 concatenated with mdl2 > }
을
이 버그로 인해 grant()
함수에있는 self
이 어쨌든 이 글로벌 값처럼 작동하는 것으로 의심됩니다. 이러한 호출이 다른 인스턴스에서 수행되는 경우에도 이전 호출 ( )의 데이터가 누적되기 때문입니다.
질문 : 왜 내 모델에서 데이터를 흘리고 있습니까? self
은 데코레이터와 관련하여 클래스 메서드의 컨텍스트에서 self
과 동일합니까?