将@property与google app引擎中的ndb数据存储区一起使用

时间:2014-01-08 14:29:12

标签: google-app-engine python-2.7 google-cloud-datastore app-engine-ndb

下面的代码显示了我在python程序中通常会做的事情。

class LogOnline(ndb.Model):
    _timeOnline = ndb.DateTimeProperty(default=None)

    @property
    def timeOnline(self):
        return self._timeOnline

    @timeOnline.setter
    def timeOnline(self, dateTime):
        self._timeOnline = dateTime
        #set memcache with all current online users
        #.....

但是此代码不起作用,因为应用引擎不允许属性以'_'开头 此外,我觉得这种类型的架构可能是不好的做法,因为它可能会在课堂上进行查询时遇到问题。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

你可以做的是让timeOnline成为没有下划线的属性,但是添加_post_put_hook来更新内存缓存。

class LogOnline(ndb.Model):
    timeOnline = ndb.DateTimeProperty(default=None)

    def _post_put_hook(self, future):
        future.get_result() #wait untill the  PUT operation has completed
        #set memcache with all current online users
        ...