Маскировка собственности в Datastore - PullRequest
0 голосов
/ 24 октября 2019

В моей коллекции есть поле, которое я хотел бы замаскировать для ответов. Вот пример кода того, чего мне нужно достичь:

class Entity(ndb.Model):
    name = ndb.StringField()

    @property
    def name(self):
        return self.name [:2] + "***"

Ожидаемый результат: имя в базе данных: Джон, имя возвращено с API: Jo ***

Когда я пытаюсьс кодом выше, получая TypeError: Cannot set non-property name при попытке создать сущность

Есть ли более умный способ сделать это, чем маскирование имени в каждом ответе? Можно ли изменить значения в _pre_get_hook () только для ответа без изменения поля в базе данных?

1 Ответ

0 голосов
/ 24 октября 2019

Я думаю, что вам нужно _post_get_hook, что-то вроде

def _post_get_hook(self,key,future):
   self.name = self.name[:2]+"***"

Тот факт, что имя изменено, вызывает беспокойство, если установка выполняется на одну и ту же сущность. Я не уверен, как ваш ответ строится. Если есть способ отфильтровать некоторые поля, то вы можете иметь отдельное свойство, которое выводится на основе более безопасного имени в _post_get_hook.

...