pyamf与FLEX对象的传递

初学FLEX,参照网上做了个小例子。实现PYTHON的类对象传输到FLEX端。第一次写教程,望大家多提点一下

 

Django 服务端,

1. 新建立一个工程helloworld,然后建立一个app--app.
2.
修改settings.py
  
app添加到INSTALLED_APPS中。

3. 工程目录中( helloworld文件夹里 )urls.py 的相关代码如下:

Python代码

from django.conf.urls.defaults import *

 

# Uncomment the next two lines to enable the admin:

# from django.contrib import admin

# admin.autodiscover()

 

urlpatterns = patterns('',

    (r'^gateway/', 'helloworld.app.amfgateway.echoGateway'),

)

4.app文件夹中添加一个amfgateway.py文件

import sys

class test:

    def __init__(self,DATA=None,SUB=None):

        self.DATA=DATA

        if SUB is None:

            self.SUB = []

        else:

            self.SUB = SUB

    def get_DATA(self):

        return self.DATA

    def set_DATA(self,DATA):

        self.DATA=DATA

    def get_SUB(self):

        return self.SUB

    def set_SUB(self, SUB):

        self.SUB =SUB

    def add_SUB(self, value):

        self.SUB.append(value)

    def insert_SUB(self, index, value): self.SUB[index] = value

   

class SUB:

    def __init__(self,NAME=None):

        self.NAME=NAME

    def get_NAME(self):

        return self.NAME

    def set_NAME(self,NAME):

        self.NAME=NAME

       

def echo(request):

    T=test()

    s=SUB()

    s1=SUB()

    s.set_NAME('wyj')

    s1.set_NAME('listtest')

    T.set_DATA('sdfsdfsd')

    T.add_SUB(s)

    T.add_SUB(s1)

    print T

    return T #返回的就是对象T

 

services = {

    'myservice.echo': echo#服务名对应相应的函数

    #'t.test': test

    # could include other functions as well

}

 

echoGateway = DjangoGateway(services)#注册服务,以供调用

 

Django的服务端就大功告成了

 

Flex

Flex.mxml:

<?xml version="1.0" encoding="utf-8"?>  

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 

    layout="absolute" creationComplete="initApp();">   

    <mx:Script>  

        <![CDATA[  

            import flash.events.NetStatusEvent;  

              

            import mx.collections.ArrayCollection;  

            import mx.rpc.AsyncToken;  

            import mx.rpc.AsyncResponder;  

            import mx.rpc.events.FaultEvent;  

            import mx.rpc.events.ResultEvent; 

            import com.*;  

           

            [Bindable]

           public var t:Test;

             

            private function initApp():void 

            {  

                  

                    var token:AsyncToken=djangoService.echo();  

                    token.addResponder(new AsyncResponder(onGetDailyStory,faultHandler));  

            }  

              

            private function onGetDailyStory(re:ResultEvent, token:Object=null):void 

            {  

                  this.t = new Test(re.result);//对象的传递,两边的对象结构要一致

//               yesterdayStory.text = t.DATA; 

             subname.text = t.SUB[0];  

            } 

              

            private function faultHandler(fe:FaultEvent, token:Object=null):void 

            {  

                trace(fe.fault.faultDetail);  

            }  

        ]]>  

    </mx:Script>  

      

    <mx:RemoteObject  

        id="djangoService" 

        destination="myservice" 

        showBusyCursor="true">  

    </mx:RemoteObject>  

      

    <mx:TextArea id="yesterdayStory" text="{this.t.DATA}" x="582" y="130" height="118" width="242"/>  

     <mx:TextArea id="subname"  x="0" y="0" height="118" width="242"/>  

</mx:Application>

新建两个ASCLASS

SUBTYPE.AS:

package com

{

    public class SUBTYPE

    {

       public var NAME:String;

       public function SUBTYPE(value:Object)

       {

           this.NAME=value.NAME

       }

    }

   

}

 

Test.as:

package com

{

    [Bindable]

    public class Test

    {

       public var DATA:String;

       [ArrayElementType("SUBTYPE")]

 

       public var SUB:Array;

       public function Test(value:Object)

       {

           this.DATA=value.DATA

           this.SUB=value.SUB;

       }

 

    }

   

}

 

然后需要在于与上述flex文件同目录中新建一个services-config.xml

<?xml version="1.0" encoding="UTF-8"?> 

<services-config> 

    <services> 

        <service id="helloworldService" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"> 

            <destination id="myservice"> //要和ppyamf里一致。

                <channels> 

                    <channel ref="helloworldChannel"/> 

                </channels> 

                <properties> 

                    <source>*</source> 

                </properties> 

            </destination> 

        </service> 

    </services> 

    <channels> 

        <channel-definition id="helloworldChannel" class="mx.messaging.channels.AMFChannel"> 

            <endpoint uri="http://127.0.0.1:8000/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/> 

        </channel-definition> 

    </channels> 

</services-config> 

右击项目名,选择Properties-àFlex Compiler,添加编译参数-services services-config.xml

-locale en_US -services services-config.xml

至此程序部分已经完成,只需要运行就可以了。

运行django服务器manage.py runserver

Run flex.mxml就可看见数据显示在屏幕上了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值