Python 使用urllib2获取对象

Python 使用urllib2获取对象,python,google-app-engine,get,urllib2,Python,Google App Engine,Get,Urllib2,我有两个GAE应用程序协同工作。一个在数据库中保存一个对象,另一个从第一个应用程序获取该对象。下面我有一段代码,其中第一个应用程序被要求,并给出了Critter对象。我正在尝试通过urllib2访问第一个应用程序的对象,这真的可能吗?我知道它可以用于json,但它可以用于对象吗 只是出于某种背景,我将此作为一个类的项目进行开发。学生们将通过创建他们的生物来学习如何主持GAE应用程序。然后他们会给我他们的小动物的url,我的应用程序会使用这些url收集他们所有的小动物,然后把它们放到我的应用程序的

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

只是出于某种背景,我将此作为一个类的项目进行开发。学生们将通过创建他们的生物来学习如何主持GAE应用程序。然后他们会给我他们的小动物的url,我的应用程序会使用这些url收集他们所有的小动物,然后把它们放到我的应用程序的世界里

我最近才听说过皮克,还没有调查过,这可能是一个更好的选择吗

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...

是的,你可以用泡菜

以下是一些用于传输实体的示例代码,包括密钥:

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)) 

如果您有两个单独的appengine应用程序使用相同的数据,则很可能违反了条款和条件。其次,如果你想从不同的数据存储中获取数据存储实体,你可以始终使用云数据存储。我如何从云数据存储中访问信息?对不起,我只是在学习GAE,所以我完全不知道这里发生了什么。你能详细说明一下吗。这里的实体是什么意思?为什么我需要钥匙?base64.b64encode(pickled_数据)在做什么?我建议遵循python入门指南:您将找到实体。维基百科:当需要对二进制数据进行编码时,通常使用Base64编码方案,这些二进制数据需要通过设计用于处理文本数据的媒体进行传输。这是为了确保数据在传输过程中保持完整而不被修改。如果你不介意的话,还有两个问题,因为这很有趣。将.to_dict()处理函数吗?例如,如果我的实体有一个move()函数,它的x和y将被添加到其中,那么它会被保留吗?其次,为什么键很重要,为什么它必须是urlsafe()?不,to_dict对实体属性进行dict。Pickle将序列化该对象。如果您不需要密钥:跳过密钥和to_dict.urlsafe意味着:您可以将它们用作url的一部分:例如:“不是url安全密钥”,因为它有空格。