如何将完全相同的 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”}
答案 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
如果为每个请求新生成数据,则此方法将起作用。如果您需要为每个请求返回相同的数据,那么您需要将其存储在数据存储区,内存缓存或会话中,以便可以检索它。