`

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 都要一致。

试着跑跑吧。
分享到:
评论

相关推荐

    使用Flex 4、Django、Python和PyAMF开发项目示例

    在本示例中,Django作为后端服务器,处理HTTP请求,使用PyAMF与Flex进行通信,并管理与MySQL数据库的连接。Django的ORM(对象关系映射)层使我们能够方便地操作数据库,无需编写低级SQL语句。 Python是这个项目的...

    django_pyamf

    接着,PyAMF作为中间件,允许Django与Flex通信。它实现了AMF协议,使得后端数据能以高效的方式传输到Flex客户端,反之亦然。在实际操作中,这可能涉及到设置AMF通道,定义序列化和反序列化的规则,以及在Django视图...

    python语言web之旅(python, mod_python, pyamf, flex, apache)

    Flex应用可以与后台Python服务(如通过PyAMF)通信,接收和发送数据,实现动态内容的实时更新。 5. Apache服务器: Apache是世界上最流行的Web服务器软件,以其稳定性和可扩展性著称。在Python Web开发中,Apache常...

    C#桌面程序与Django通信(前后端分离机制)

    在这个场景中,我们将探讨如何在Windows环境下,通过C#桌面程序(WinForm)与Django Web框架进行通信,实现前后端分离。 首先,C# WinForm作为前端应用,可以使用HttpClient类来发起HTTP请求,与Django服务器进行...

    django入门与实践.zip

    《Django入门与实践》这份资源是一份针对初学者的Python Web开发教程,重点介绍了Django框架的基础知识和实际应用技巧。Django是Python编程语言中最受欢迎的Web框架之一,以其“快速、可扩展且优雅”的特性深受...

    Django入门与实践教程1

    【Django入门与实践教程1】是一份针对初学者的详尽教程,旨在引导读者从零开始构建一个实际的Django项目。教程涵盖了从环境搭建到项目部署的全过程,涉及了Django框架的核心概念和技术。 首先,【环境搭建】章节会...

    Django框架:WebSocket与实时通信的技术实现与应用场景

    内容概要:本文详细介绍了如何在Django框架中使用WebSocket和Django Channels实现高效的实时通信功能。主要内容包括:WebSocket的基本原理及其在现代Web应用中的重要性;Django Channels的架构和使用方法;具体实例...

    django电子商务网站源码.zip

    django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...

    django笔记 django笔记

    Django拥有丰富的第三方库,如Django REST framework用于构建RESTful API,Django Channels支持WebSocket通信,以及用于权限管理的Django Guardian等。 以上只是Django框架的基本介绍,实际上,Django的功能远不止...

    Python库 | PyAMF-0.5-py2.5-linux-x86_64.egg

    4. **集成其他Python框架**:PyAMF能够与多种Python Web框架集成,如Django、Flask、Pylons等,方便地实现与Flash客户端的交互。 5. **Flex和 BlazeDS集成**:如果你的项目使用了Adobe Flex或BlazeDS,PyAMF可以...

    Django实现商城网站源码.zip

    Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...

    Django客户管理系统源码.zip

    Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...

    用Python与Django开发的在线教育平台网站源码.zip

    用Python与Django开发的在线教育平台网站源码 用Python与Django开发的在线教育平台网站源码 用Python与Django开发的在线教育平台网站源码 用Python与Django开发的在线教育平台网站源码 ...

    Django 与 Flash 的结合!-- 带给你更为强大的Web体验

    例如,Flash应用可以通过XMLSocket或XMLHttpRequest与Django后端进行实时通信,获取或发送数据。在Django端,可以创建API接口,接收并处理Flash发送的数据请求。 #### 3. 安全性考虑 由于Flash的内容可以直接访问...

    django+scrapy结合

    将Django与Scrapy结合,可以利用Django的Web功能来启动、监控和控制Scrapy爬虫,实现一个用户友好的爬虫管理系统。以下是实现这种结合的关键步骤: 1. **创建Django项目和应用**:首先,我们需要创建一个新的Django...

    基于Django的个人网盘源码.zip

    基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django...

    Django.rar+框架+项目和应用+模型设计与数据库等全套教程

    Django框架简介与环境搭建 Django项目和应用创建 Django模型设计与数据库操作 Django视图函数与URL配置 Django模板系统与HTML渲染 ...Django高级特性:WebSocket与实时通信 Django实战项目:在线商城系统开发

    Django_layui后台模板

    - RESTful API:如果项目需要前后端分离,可以利用Django的REST framework构建API接口,与前端进行通信。 7. 学习资源: - Django官方文档:了解Django框架的基础知识和最佳实践。 - Layui官方文档:学习Layui的...

    Django:Django高级特性:WebSocket与实时通信.docx

    Django:Django高级特性:WebSocket与实时通信.docx

Global site tag (gtag.js) - Google Analytics