2014-09-02 45 views
0

我正在使用GAE/webapp2,並且當前使用request.POST來從AJAX帖子中提取JSON數據。它以UnicodeMultiDict的形式出現。使用webapp2 AJAX發佈請求

有沒有比request.POST更好的方法。如果我希望重新捕獲客戶端的數據結構,那麼閱讀此內容的好方法是什麼?理想情況下,我想盡量減少重建工作,並保留整數,布爾值,對象結構等。

回答

0

GAE是一個PaaS因此像RMI(或其在python中的等價物)的東西目前不存在。我目前使用自定義標記語言來保存基本數據類型並幫助解析器驗證數據。它是一個簡單的鍵 - 值結構形成過程如下:

"key/subkey1/.../subkeyn":(<datatype>)"value"; 

解析器讀取密鑰,該值和該數據類型,並創建嵌套對象的分層tructure,其複製在響應中的層級(其目的是通過在生成對象的層次結構中請求obj_key.obj_1 .... obj_n)來訪問對象「key /.../ subkeyn」的symple訪問權限)。該數據類型用於在創建對象結構期間驗證和表徵該數據。

這可以進一步擴展。例如(我用Java術語說,對不起)我可以創建一個接口「Sendable」,它具有A)將對象以串行和可發送形式放置所需的所有方法,B)從響應重建對象。然後,任何實現Sendable的對象都將能夠通過該協議發送並重建。
例如想象,接口可發送的定義如下(在僞代碼):

interface Sendable{ 
    string toSendableString(); 
    void fromSendable(Object hierarchy); 
} 

和想象到有一個類用戶(在僞代碼)

class User implements Sendable{ 
    string username; 
    string hash; 
    string toSendableString(){ 
     return "\"user/username\":(string)\"" + username + "\";" 
      + "\"user/hash\":(hash)\"" + hash + "\""; 
    } 
    void fromSendable(Object h){ 
     username = h.getvalue("username"); 
     hash = h.getvalue("hash"); 
    } 
} 

然後,在數據類型,可以指定類型User和任何時候解析器找到一個User數據類型可以檢查它是否是有效類型,如果它實現了Sendable,然後通過調用專用函數創建一個對象。 (很明顯,它只能傳遞給那個函數只有包含該對象的子層次)。