初学FLEX,参照网上做了个小例子。实现PYTHON的类对象传输到FLEX端。第一次写教程,望大家多提点一下
Django 服务端,
1. 新建立一个工程helloworld,然后建立一个app--app.
2. 修改settings.py
将app添加到INSTALLED_APPS中。
3. 工程目录中( helloworld文件夹里 )的urls.py 的相关代码如下:
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就可看见数据显示在屏幕上了。