pyamf django 与 flex 通信

1 篇文章 0 订阅
1 篇文章 0 订阅
必须先安装了:
python
django

并配置了python path .

首先先创建django 目录:
django-admin.py startproject testpyamf
作者是创建在d:\
在D:\testpyamf 会出现4个.py文件。

在Eclipse 中创建python 工程testpyamf,注意,不是django 目录。
在testpyamf 工程上Import ,注意,不是在src 上导入。
导入D:\testpyamf 就OK 了。会看到工程上多了4个文件。

在src 中新建一个 pydev package 命名 :corleone (笔者E名)
会看到corleone 下多一个空的__init__.py 。大伙都不傻,都知道啥意思的。忽略不讲。

在corleone 中添加 urls.py ,代码如下:

from django.conf.urls.defaults import patterns

urlpatterns = patterns('corleone.view',
(r'^gateway/', 'usersGateway'),
)


再在corleone下新建view.py 代码如下:

# -*- coding:utf-8 -*-
from pyamf.remoting.gateway.django import DjangoGateway

def getAllCompany(request):
return [Company(), Company(3, '323'), Company(23, '32compname')]

def change_name_and_id(request, company):
id = company.id
name = company.name
company.id = name
company.name = id
return company

usersGateway = DjangoGateway({
'mimi.getAllCompany':getAllCompany,
'mimi.change':change_name_and_id,
})

class Company(object):
def __init__(self, id=None, name='2'):
self.id = id
self.name = name


在工程目录下的urls.py代码如下:

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',
url(r'^corleone/', include('corleone.urls')),
)

服务器端算是OK 了。
接着:启动django . 这里插一句。eclipse 也可以调试django 工程,支持断点。
请看我下一篇博客,嘿嘿……。

假设启动没问题。

且说flex 客户端:
新建flex web 端 工程:testpyamf
笔者是flex 4 的 。

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.rpc.AsyncResponder;
import mx.rpc.AsyncToken;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;


[Bindable] private var depAC:Array;
[Bindable] private var jobsAC:Array;

protected function button1_clickHandler(event:MouseEvent):void
{
var token:AsyncToken=djangoService.getAllCompany();
token.addResponder(new AsyncResponder(AfterGetDeps,falutHandler));
}

private function AfterGetDeps(result:Object, token:Object=null):void{
var evt:ResultEvent=result as ResultEvent;
depAC=evt.result as Array;

var dp:ArrayCollection = new ArrayCollection(depAC);

dg_company.dataProvider = dp;

var dgc_id:DataGridColumn = new DataGridColumn();
dgc_id.dataField = "id";

var dgc_name:DataGridColumn = new DataGridColumn();
dgc_name.dataField = "name";

dg_company.addDataEffectItem(dgc_name);
dg_company.addDataEffectItem(dgc_id);

}
private function falutHandler(error:Object, token:Object=null):void{
var evt:FaultEvent=error as FaultEvent;
Alert.show(evt.message.toString());
}
private function succeed(result:Object, token:Object=null):void{
var evt:ResultEvent=result as ResultEvent;
var o:Object =evt.result as Object;

Alert.show("name:" + o.name + "---id:" + o.id)
}
private function error(error:Object, token:Object=null):void{
var evt:FaultEvent=error as FaultEvent;
Alert.show(evt.message.toString());
}
protected function button2_clickHandler(event:MouseEvent):void
{
var token:AsyncToken=djangoService.change(dg_company.selectedItem);
token.addResponder(new AsyncResponder(succeed,error));
}
]]>
</fx:Script>

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<mx:RemoteObject id="djangoService" destination="mimi" showBusyCursor="true"/>
</fx:Declarations>
<s:HGroup width="40%" height="50%" id="top" horizontalAlign="center">

<mx:DataGrid id="dg_company" allowMultipleSelection="true" />

<s:Button label="get all company " click="button1_clickHandler(event)" />
<s:Button label="change company id and name " click="button2_clickHandler(event)" />

</s:HGroup>
</s:Application>


然后在flex 的 src 中 新添 文件:services-config.xml
代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="ananasService" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="mimi">
<channels>
<channel ref="ananasChannel"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="ananasChannel" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost:8080/corleone/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>


最后,在flex 工程中右击,选属性,选flex 编译器, 附加编译器参数:

-locale zh_CN -services "services-config.xml"


然后就OK 了。
需要注意的是,前后台的mimi 都要一致。

试着跑跑吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值