2013-06-26 78 views
0

我有两个GAE应用程序协同工作。一个在数据库中保存一个对象,另一个从第一个应用程序获取该对象。下面我有一些代码,第一个应用程序被要求并给出了Critter对象。我试图通过urllib2访问第一个应用程序的对象,这真的有可能吗?我知道它可以用于json,但它可以用于对象吗?使用urllib2获取对象

只是为了一些环境,我正在开发这个作为一个类的项目。学生将通过创建他们的小动物学习如何主持GAE应用程序。然后他们会给我他们的生物的网址,我的应用程序将使用网址收集他们所有的生物,然后把它们放到我的应用程序的世界。

我最近才听说过泡菜,还没有看过,可能是更好的选择?

critter.py:

class Access(webapp2.RequestHandler): 
    def get(self): 
     creature = CritStore.all().order('-date').get() 
     if creature: 
      stats = loads(creature.stats) 
      return SampleCritter(stats) 
     else: 
      return SampleCritter() 

map.py:

class Out(webapp2.RequestHandler): 
    def post(self): 
     url = self.request.POST['url']#from a simple html textbox 
     critter = urllib2.urlopen(url) 
     ...work with critter as if it were the critter object... 
+0

如果您有两个独立的appengine应用程序使用相同的数据,您可能会违反条款和条件。其次,如果您想从不同的数据存储获取数据存储实体,则始终可以使用云数据存储。 –

+0

如何访问云数据存储中的信息? – EasilyBaffled

+0

https://developers.google.com/datastore/ –

回答

0

是的,你可以用咸菜。

下面是一些示例代码转移的实体,包括键:

entity_dict = entity.to_dict() # First create a dict of the NDB entity 
entity_dict['entity_ndb_key_safe'] = entity.key.urlsafe() # add the key of the entity to the dict 
pickled_data = pickle.dumps(entity_dict, 1) # serialize the object 
encoded_data = base64.b64encode(pickled_data) # encode it for safe transfer 

至于urllib2的替代可以使用GAE urlfetch.fetch()

在所述请求的应用程序可以:

entity_dict = pickle.loads(base64.b64decode(encoded_data)) 
+0

对不起,但我只是在学习GAE,所以我完全不知道这里发生了什么。你能否详细说明一下。你在这里的意思是什么?为什么我需要钥匙?什么是base64.b64encode(pickled_data)在做什么? – EasilyBaffled

+0

我建议遵循Python入门:https://developers.google.com/appengine/docs/python/gettingstartedpython27/introduction,你会发现这个实体。维基百科:Base64编码方案通常用于需要编码二进制数据的需求,该数据需要通过旨在处理文本数据的媒体进行传输。这是为了确保数据在运输过程中保持完整无需修改。 – voscausa

+0

如果你不介意,还有2个问题,因为这很有趣。将.to_dict()处理函数?例如,如果我的实体有一个move()函数,它的x和y将被添加到,它会被保存下来吗?其次为什么关键问题,为什么它必须是urlsafe()? – EasilyBaffled