必须先安装了:
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 ,代码如下:
再在corleone下新建view.py 代码如下:
在工程目录下的urls.py代码如下:
服务器端算是OK 了。
接着:启动django . 这里插一句。eclipse 也可以调试django 工程,支持断点。
请看我下一篇博客,嘿嘿……。
假设启动没问题。
且说flex 客户端:
新建flex web 端 工程:testpyamf
笔者是flex 4 的 。
代码如下:
然后在flex 的 src 中 新添 文件:services-config.xml
代码如下:
最后,在flex 工程中右击,选属性,选flex 编译器, 附加编译器参数:
然后就OK 了。
需要注意的是,前后台的mimi 都要一致。
试着跑跑吧。
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 都要一致。
试着跑跑吧。