设为首页 收藏本站
查看: 1148|回复: 0

[经验分享] flex与python后台的交互(原创)

[复制链接]

尚未签到

发表于 2015-4-23 09:21:16 | 显示全部楼层 |阅读模式
flex有多种与后台交互的方法,(/Files/xingluzhe/Flex与Web服务的交互.ppt)这里有个不错的介绍。我之前用的是python的django做后台,有些许的收获,先奉献出来与大家分享。
首先是Django后台的搭建,这个在我的一篇博文中有介绍,这里我便不再赘述。
其次是flex前台与python后台的交互。
1. 新建一.xml配置文件(放在与mxml文件同目录下)。配置文件中的内容如下:
  
  
      
        
            
               
                    
               
               
                    *
               
            
        
   
   
        
            
        
   

2. 在主mxml文件中添加如下语句:
   
   
    另外需要注意的是,我的整个工程都只有用到一个RemoteObject。在别的component中应用主页面中定义的RemoteObject主要使用Application.application.djangoService;就行了。
3. 与后台交互
    private var token: AsyncToken;//定义一个token
    token = remoteObj.echo(remotefunc, arg);  //调用后台数据库提供的接口echo         
    token.addResponder(new AsyncResponder(onResultHandle,faultHandler));    //为token添加responder
    然后在onResultHandle中做你对后台返回的结果的处理
    private function onResultHandle(re:ResultEvent, token:Object=null):void
    {
          resultHandle(re);  //这里做相应的处理
     }
            
     private function faultHandler(fe:FaultEvent, token:Object=null):void
     {
           trace(fe.fault.faultDetail); //这个函数可以原封照抄,因为当你的后台出错时,它会在flex console窗口中打印出错的位置和原因
      }
4. 从上面的介绍可以看出,每次调用后台的一个方法都会重复执行大致相同的操作,除了调用的方法不一样。所以为了达到代码的重用,我写了个简单类来负责与后台的通信:/Files/xingluzhe/KCommunication.txt(这个类的代码)
/////////////////////////////////////////////////////////
// FileName: KCommunication.as
// creator : David(蔡海滨)
// Date    : 2009-8-20
// Commment: 主要用于负责前段与后台的通信
/////////////////////////////////////////////////////////
package com.wps
{
    import flash.events.EventDispatcher;
   
    import mx.core.Application;
    import mx.rpc.AsyncResponder;
    import mx.rpc.AsyncToken;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.remoting.RemoteObject;
   
    public class KCommunication extends EventDispatcher
    {
        /**
         * @brief 类构造函数
         *
         */
        public function KCommunication()
        {
        }
        
        /**
         * 设置Token和相应的处理函数
         * @param remotefunc 想要调用的远程函数
         * @param arg 要给远程函数传递的参数(都放进一个字符串中)
         * @param func 与后台交互完后的响应事件
         *
         */
        public function setTokenAndHandle(remotefunc:String, arg:String, func:Function):void
        {
            resultHandle = func;                                                
            token = remoteObj.echo(remotefunc, arg);     //注意,这里我让后台的接口统一为echo,传递的参数都是一个字符串            
            token.addResponder(new AsyncResponder(onResultHandle,faultHandler));            
        }
        
        /**
         * @brief 与后台交互完后的响应事件
         * @param re
         * @param token
         *
         */
        private function onResultHandle(re:ResultEvent, token:Object=null):void
        {
            resultHandle(re);//注意,这里的这个处理函数,可以在类外提供
        }
            
        private function faultHandler(fe:FaultEvent, token:Object=null):void
        {
            trace(fe.fault.faultDetail);
        }
        
        private var remoteObj: RemoteObject = Application.application.djangoService;;
        private var resultHandle:Function = null;
        private var token: AsyncToken;
    }
}
举个例子吧:
比如要实现登陆的功能
1. import com.KCommunication;
2.  private var comm:KCommunication = new KCommunication();
3. private function onConfirm(evt:Event):void
{            
  //getUser是我在后台定义好的接口,用于返回用户的用户名,和密码,这里validateUserInfo就是对返回结果的处理
    comm.setTokenAndHandle("getUser", username.text, validateUserInfo);  
}
4. private function validateUserInfo(re:ResultEvent):void
{
    if(re.result.length > 0)
    {
        _name = re.result[0].username.toString();
        _pw = re.result[0].password.toString();
        _nick = re.result[0].nickname.toString();
        if (_name === username.text && _pw === password.text)
        {
            kgv._username = _name;
            kgv._password = _pw;
            kgv._nickname = _nick;
            
            username.text = "";
            password.text = "";
        }
        else
        {
            errorMessage();
        }
    }
    else
    {
        errorMessage();
    }
}
这样便可以实现通信。
现在就剩下最后一个疑问了:后台统一接口的实现^_^
def getUser(name):
    #return the user
    user = Users.objects.filter(username = name[0])
    return user
//这是我定义的后台的统一的接口
def echo(request, requestFunc, requestArg)://第一个参数是必须的,调用时不用指定,requestFunc是提供给前台的方法,requestArg是字符串的参数,      
                                                                 以|->!!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59886-1-1.html 上篇帖子: Python Web编程(七) 下篇帖子: 用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表