2010-02-09 17 views
1

我想从flex.i传递xml格式数据到python中知道如何从flex传递,但我的问题是我如何获得传入的数据在Python中,然后数据应插入到mysql.and以及我想检索mysql数据到python(cgi),python应该将所有数据转换为xml格式,并将所有数据传递到flex .. 先谢谢了... ..我怎样才能将XML格式的数据从flex传递到python

+0

你是问如何用Python语言编写一个Web服务,接受Flex的消息? – 2010-02-09 11:11:08

回答

1

有关更多详细信息,请参阅http://www.artima.com/weblogs/viewpost.jsp?thread=208528,这里简要概述了我认为您在寻找的内容。

SimpleXMLRPCServer库允许您轻松创建服务器。以下是关于您可以创建一个提供两种服务操作字符串的最简单的服务器,:

import sys 
from random import shuffle 
from SimpleXMLRPCServer import SimpleXMLRPCServer 

class MyFuncs: 
    def reverse(self, str) : 
     x = list(str); 
     x.reverse(); 
     return ''.join(x); 
    def scramble(self, str): 
     x = list(str); 
     shuffle(x); 
     return ''.join(x); 

server = SimpleXMLRPCServer(("localhost", 8000)) 
server.register_instance(MyFuncs()) 
server.serve_forever() 

一旦你到服务器的连接,该服务器的行为像一个本地对象。您可以像调用该对象的普通方法那样调用服务器的方法。

这就像您希望的那样(和其他Python RPC库存在;例如CORBA客户端)一样清洁RPC实现。但它都是基于文本的;尝试使用良好的GUI创建精美的应用程序时不太令人满意。我们希望是所有世界中最好的--Python(或者您最喜欢的语言)在底层进行繁重的工作,而Flex则创造了用户体验。

要使用该库,请下载并在某处解压缩。该软件包包括所有的源代码和编译的as3-rpclib.swc库 - .swc扩展名表示一个存档文件,这个库的一部分可以被提取并合并到最终的.swf文件中。要将库包含在项目中,必须通过转到Project | Properties并选择“Flex Builder”(可以免费试用或只使用免费的命令行工具,并添加Apollo部分)阿波罗构建路径“,然后选择”库路径“选项卡并按下”添加SWC ...“按钮。接下来,您将名称空间ak33m添加到项目中,如下面的代码所示,并且您已准备好创建XMLRPCObject。

注意:我在这里使用Apollo的唯一原因是,我正在考虑用好用户界面的桌面应用程序。您可以轻松将其制作为Flex应用程序。

这里就是整个阿波罗应用程序作为一个MXML文件,我将详细解释:

<?xml version="1.0" encoding="utf-8"?> 
<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:ak33m="http://ak33m.com/mxml" layout="absolute"> 
    <mx:Form> 
     <mx:FormHeading label="String Modifier"/> 
     <mx:FormItem label="Input String"> 
      <mx:TextInput id="instring" change="manipulate()"/> 
     </mx:FormItem> 
     <mx:FormItem label="Reversed"> 
      <mx:Text id="reversed"/> 
     </mx:FormItem> 
     <mx:FormItem label="Scrambled"> 
      <mx:Text id="scrambled"/> 
     </mx:FormItem> 
    </mx:Form> 
    <ak33m:XMLRPCObject id="server" endpoint="http://localhost:8000"/> 
    <mx:Script> 
     <![CDATA[ 
      import mx.rpc.events.ResultEvent; 
      import mx.rpc.events.FaultEvent; 
      import mx.rpc.AsyncToken; 
      import mx.controls.Alert; 
      import mx.collections.ItemResponder; 
      private function manipulate() : void { 
       server.reverse(instring.text).addResponder(new ItemResponder(reverseResult, onFault)); 
       server.scramble(instring.text).addResponder(new ItemResponder(scrambleResult, onFault)); 
      } 
      private function reverseResult(event : ResultEvent, token : AsyncToken = null) : void { 
       reversed.text = event.result.toString(); 
      } 
      private function scrambleResult(event : ResultEvent, token : AsyncToken = null) : void { 
       scrambled.text = event.result.toString(); 
      } 
      private function onFault (event : FaultEvent, token : AsyncToken = null) : void { 
       Alert.show(event.fault.faultString, event.fault.faultCode); 
      }   
     ]]> 
    </mx:Script> 
</mx:ApolloApplication>