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、コードは次のとおりです.

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が一致していることです.
走ってみよう.