pyamf djangoとflex通信
まずインストールする必要があります.
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が一致していることです.
走ってみよう.