2013-06-26 77 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