将JSON从Python类返回到另一个类

时间:2017-09-21 17:15:23

标签: python json google-app-engine

如何将完全相同的 JSON数据从一个类返回到另一个类?

代码:

now

错误:

  

class1_info = self.Class1()

     

AttributeError:'Class2'对象没有属性'Class1'

修改(更多详情):

我的应用程序的一部分需要整个 JSON输出,而另一部分只需要 info 字典中的now值。这两个类都将使用 info 字典中相同的完全数据。

我一直在尝试获取from google.appengine.api import memcache class Class1(webapp.RequestHandler): def generate_data(self): random_id = str(uuid.uuid1()) time_now = int(time.time())) id_cached = memcache.add(key=random_id, value=random_id, time=600) get_id_cached = memcache.get(key=random_id, value=random_id, time=600) time_cached = memcache.add(key=time_now, value=time_now, time=600) get_time_cached = memcache(key=time_now) info = { id: get_id_cached, now: get_time_cached } json_info = json.dumps(info) return json_info def get(self): self.response.write(generate_data()) class Class2(webapp.RequestHandler): def get(self): getting_info = Class1().generate_data() print getting_info 输出,但我只是收到错误消息。

尝试:

注意:使用@Alex的回答(使用@snakecharmerb推荐的memcache)

代码:

{{1}}

结果:

  

{“id”:“9d752605-a20d-11e7-8bfd-bfe81b332704”,“time”:“1506356501”}

     

{“id”:“9b95e899-a20d-11e7-b137-bfe81b332704”,“time”:“1506356498”}

2 个答案:

答案 0 :(得分:1)

了解更多有关您尝试做的事情会有所帮助,但根据您的代码段,这应该可以做到。

Class1(webapp.RequestHandler):

    @staticmethod
    def perform():
        random_id = str(uuid.uuid1())
        time_now = int(time.time()))
        info = {
            id: random_id,
            now: time_now
        }

       json_info = json.dumps(info)
       print json_info
       return json_info

    def get(self):
       self.response.write(self.perform())

Class2(webapp.RequestHandler):
    def get(self):
        getting_info = Class1.perform()
        getting_info_time = getting_info['now']
        print getting_info_time

另一条路线是Class2继承Class1,另一条路线是将'perform'函数移到文件级外。没有更多的背景,很难给出更合适的答案。

编辑: 创建两个类继承的'BaseHandler'似乎更合适。检查是否存在缓存的ID,如果为None,则创建&加。

RANDOM_ID = "RANDOM_ID"

MyBaseHandler(webapp.RequestHandler):

    @staticmethod
    def get_random_id():
        cached = memcache.get(key=RANDOM_ID)
        if not cached:
            cached = {id: str(uuid.uuid1()), now: int(time.time()))}
            memcache.add(key=RANDOM_ID, value=cached, time=600)
        return cached

Class1(MyBaseHandler):

    def get(self):
       self.response.write(self.get_random_id())

Class2(MyBaseHandler):
    def get(self):
        print self.get_random_id()['now']

答案 1 :(得分:1)

如果两个处理程序都需要访问相同的数据,请将数据生成委托给函数。

def generate_data():
    random_id = str(uuid.uuid1())
    time_now = int(time.time()))
    info = {
        id: random_id,
        now: time_now
    }
    return info


Class1(webapp.RequestHandler):

    def get(self):
       info = generate_data()
       json_info = json.dumps(info)
       print json_info
       self.response.write(info)


Class2(webapp.RequestHandler):

    def get(self):
        info = generate_data()
        getting_info_time = info['now']
        print getting_info_time

如果为每个请求新生成数据,则此方法将起作用。如果您需要为每个请求返回相同的数据,那么您需要将其存储在数据存储区,内存缓存或会话中,以便可以检索它。