将JSON从一个Python类返回到另一个类
如何将相同的JSON数据从一个类返回到另一个类 代码:将JSON从一个Python类返回到另一个类,python,json,google-app-engine,Python,Json,Google App Engine,如何将相同的JSON数据从一个类返回到另一个类 代码: class Class1(webapp.RequestHandler): def get(self): random_id = str(uuid.uuid1()) time_now = int(time.time()) info = { id: random_id, now: time_now } json
class Class1(webapp.RequestHandler):
def get(self):
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
self.response.write(info)
class Class2(webapp.RequestHandler):
def get(self):
getting_info = self.Class1()
getting_info_time = getting_info['now']
print getting_info_time
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
错误:
class Class1(webapp.RequestHandler):
def get(self):
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
self.response.write(info)
class Class2(webapp.RequestHandler):
def get(self):
getting_info = self.Class1()
getting_info_time = getting_info['now']
print getting_info_time
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
class1_info=self.class1()
AttributeError:“Class2”对象没有属性“Class1”
编辑(更多详细信息):
我的应用程序的一部分需要整个JSON输出,而另一部分只需要信息字典中的
now
值。这两个类都将使用信息字典中相同的精确的数据
我一直在尝试获取输出,但我只收到错误消息
尝试:
注:使用@Alex的答案(使用memcache的@snakecharmerb建议)
代码:
class Class1(webapp.RequestHandler):
def get(self):
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
self.response.write(info)
class Class2(webapp.RequestHandler):
def get(self):
getting_info = self.Class1()
getting_info_time = getting_info['now']
print getting_info_time
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
结果:
{“id”:“9d752605-a20d-11e7-8bfd-bfe81b332704”,“时间”:“1506356501”}
{“id”:“9b95e899-a20d-11e7-b137-bfe81b332704”,“时间”:“1506356498”}
了解更多关于您正在尝试做的事情会有所帮助,但基于您的代码片段,这应该可以做到
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是否存在,如果没有,请创建并添加
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']
了解更多关于您正在尝试做的事情会有所帮助,但基于您的代码片段,这应该可以做到
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是否存在,如果没有,请创建并添加
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']
如果两个处理程序需要访问相同的数据,请将数据生成委托给函数
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
如果每个请求的数据都是新生成的,那么这种方法将起作用。如果您需要为每个请求返回相同的数据,那么您需要将其存储在数据存储、memcache或会话中,以便检索。如果两个处理程序都需要访问相同的数据,请将数据生成委托给一个函数
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
如果每个请求的数据都是新生成的,那么这种方法将起作用。如果您需要为每个请求返回相同的数据,那么您需要将其存储在数据存储区、memcache或会话中,以便可以检索。欢迎使用依赖项注入!您必须将Class1对象传递给Class2,或者从Class1.get返回json\u info
,然后以某种方式将其传递给Class2.get。你的会议说Class2没有属于Class1的成员谢谢你的指导你可以实际实现Class2的\uuuu init\uuuu
方法,然后使用类似于self.cls1=Class1()
我的应用程序的一部分需要整个JSON输出,而另一部分只需要信息字典中的now
值。我一直在尝试获取输出,但我只收到错误消息。欢迎使用依赖注入!您必须将Class1对象传递给Class2,或者从Class1.get返回json\u info
,然后以某种方式将其传递给Class2.get。你的会议说Class2没有属于Class1的成员谢谢你的指导你可以实际实现Class2的\uuuu init\uuuu
方法,然后使用类似于self.cls1=Class1()
我的应用程序的一部分需要整个JSON输出,而另一部分只需要信息字典中的now
值。我现在一直在尝试获取输出,但我只收到了错误消息。您建议如何为UUID使用memcache?我一直在尝试memcache.add
和memcache.get
但运气不好:now\u set=memcache.add(key=now,value=now,time=300)now\u get=memcache.get(key=now)info={id:random\u id,now:now\u get}
这些值在300秒内一直在变化,而不是保持不变。我已经阅读了文档:以及如何使用memcache:。是否存在memcache限制,阻止它存储值并返回与time=300
相同的值,还是我使用了错误的值?除非您为可靠选项付费,否则memcache不会被认为是可靠的。appengine中的Memcache实际上只是一个缓存,不应该依赖它。您建议如何为UUID使用Memcache?我一直在尝试memcache.add
和memcache.get
但运气不好:now\u set=memcache.add(key=now,value=now,time=300)now\u get=memcache.get(key=now)info={id:random\u id,now:now\u get}
这些值在300秒内一直在变化,而不是保持不变。我已经阅读了文档:以及如何使用memcache:。是否存在memcache限制,阻止它存储值并返回与time=300
相同的值,还是我使用了错误的值?除非您为可靠选项付费,否则memcache不会被认为是可靠的。appengine中的Memcache实际上只是一个缓存,不应该依赖它。谢谢你,这个答案在返回JSON(经过一些小的编辑)时非常有用,尽管实际值会发生变化,但这不是期望的结果。这两个类应该有相同的确切答案,因此我编辑了我的问题以反映这一要求。我仍然投票,因为它确实完成了它应该完成的大部分任务。我不太熟悉memcache的复杂性/时序,但我认为编辑代码首先检查memcache键的存在应该可以做到这一点。另外,从单个“BaseHandler”继承的两个类现在感觉更合适。谢谢你,这个答案在返回JSON时最有帮助(只做了一些小的编辑)