2014-09-02 152 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,然后通过调用专用函数创建一个对象。 (很明显,它只能传递给那个函数只有包含该对象的子层次)。