GAE/PのExpandoクラスの使い方

Google App Engineには「google.appengine.ext.db.Expando」というクラスが用意されています。このクラスを使うと、プロパティを動的に定義して使用することができます。なお、このクラス「google.appengine.ext.db.Model」のサブクラスであるため、データストアへの書き込みや読み込みなどを行うことができます。

例)

class ExpandoSample(db.Expando):
    name = db.StringProperty()


class MainHandler(webapp.RequestHandler):

    def get(self):
        es = ExpandoSample(key_name="KEY",
                name="TestName",
                param1="Param1",
                param2=True,
                param3=5)
        es.put()
        path = os.path.join(os.path.dirname(__file__), ‘index.html') 
        self.response.out.write(template.render(path, "))


class GetHandler(webapp.RequestHandler):

    def get(self):
        es = ExpandoSample.get_by_key_name("KEY")
        logging.info("ES.params1: " + str(es.param1) + "(" + str(es.param1.__class__) + ")")  # ES.params1: Param1(<type ‘unicode'>)
        logging.info("ES.params2: " + str(es.param2) + "(" + str(es.param2.__class__) + ")")  # ES.params2: True(<type ‘bool'>)
        logging.info("ES.params3: " + str(es.param3) + "(" + str(es.param3.__class__) + ")")  # ES.params3: 5(<type ‘long'>)

実際の用途としましては、configなど多数の変数を保持する可能性があるモデルに対して使うのがいいのかもしれないです。

The Expando Class - Google App Engine - Google Code

この記事が役に立った場合、シェアしていただけると励みになります!!