`
androider
  • 浏览: 752129 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

PyAmf配置

阅读更多
http://blog.eshangrao.com/2008/02/16/447/

搭建Flex和Django的桥梁:PyAmf的安装

以上我们已经准备好了后台环境,创建了初始的数据,那么我们的Flex程序如何与Django交互呢,答案是PyAmf,这个是Python的Amf实现,通过他,Flex就可以使用Amf的方式和Python程序交互。值得一提的是,这个支持Amf3。

PyAmf目前的稳定版本是0.1,和前面安装Django一样的考虑,我们也安装svn的开发版本
cd $work_root/server
svn co http://svn.pyamf.org/pyamf/trunk pyamf-trunk
cd pyamf-trunk
sudo python setup.py develop

接着在我们的Django工程目录下创建一个amfgateway.py文件,内容如下:
from pyamf.remoting.gateway.django import DjangoGateway
from ananas.users.models import Department,User

def getAllDepartments(request):
    return Department.objects.all()

def getDepAllUsers(request,depID):
    dep=Department.objects.get(id=depID)
    return dep.user_set.all()

def updateUser(request,userID,userName,depID):
    user=User.objects.get(id=userID)
    user.name=userName
    user.depID=depID

usersGateway = DjangoGateway({
    'getDepAllUsers': getDepAllUsers,
    'getAllDepartments':getAllDepartments,
    'updateUser':updateUser
 })

以上定义了一个userGateway Amf网关,提供了三个分别获取所有部门、用户和更新用户信息的方法。

接着打开$work_root/server/src/ananas/urls.py,定义AMF网关的访问URL,用于Flex端访问。
from django.conf.urls.defaults import *

urlpatterns = patterns('',
    # Example:
    # (r'^ananas/', include('ananas.foo.urls')),

    # Uncomment this for admin:
#     (r'^admin/', include('django.contrib.admin.urls')),
    (r'^ananas/gateway/', 'ananas.amfgateway.usersGateway'),
)

以上定义对/ananas/gateway的访问,使用usersGateway进行处理。(注意,这个urls.py是Django里面的最经典的东西,这样可以使用正则表达式,定义非常灵活的URL处理)

接着我们来进行Flex端的开发。

首先,为了代码分离的考虑,我们将后台Django服务配置的设置单独存放在services-config.xml文件里面:
[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="ananasAmf">
                <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://127.0.0.1/ananas/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
</services-config>

注意,其中<endpoint />里面的uri地址就是我们前面在Django的urls.py中定义的PyAMF网关访问URL地址一致。

下面是一个简单的Flex的测试代码:
[xml]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="getAllDepartment()">
	<mx:Script>
		<![CDATA[
			import mx.rpc.AsyncToken;
			import mx.rpc.AsyncResponder;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.controls.Alert;

			private function getAllDepartment():void{
				var token:AsyncToken=djangoService.getAllDepartments();
				token.addResponder(new AsyncResponder(AfterGetDeps,falutHandler));
			}
			[Bindable]
			private var depAC:Array;
			private function AfterGetDeps(result:Object, token:Object=null):void{
				var evt:ResultEvent=result as ResultEvent;
				depAC=evt.result as Array;
			}
			private function falutHandler(error:Object, token:Object=null):void{
				var evt:FaultEvent=error as FaultEvent;
				Alert.show(evt.message.toString());
			}

			[Bindable]
			private var userAC:Array;
			private function doQueryUser():void{
				var token:AsyncToken=djangoService.getDepAllUsers(dep_cb.selectedItem.id);
				token.addResponder(new AsyncResponder(AfterGetUsers,falutHandler));
			}
			private function AfterGetUsers(result:Object, token:Object=null):void{
				var evt:ResultEvent=result as ResultEvent;
				userAC=evt.result as Array;
			}
		]]>
	</mx:Script>
	<mx:RemoteObject
		id="djangoService"
		destination="ananasAmf"
		showBusyCursor="true"/>
	<mx:Panel title="用户管理">
		<mx:DataGrid dataProvider="{userAC}">
		<mx:columns>
			<mx:DataGridColumn dataField="id" headerText="员工号" width="100"/>
			<mx:DataGridColumn dataField="name" headerText="姓名" width="200"/>
		</mx:columns>
	</mx:DataGrid>
		<mx:ControlBar>
			<mx:ComboBox id="dep_cb" dataProvider="{depAC}" labelField="name"/>
			<mx:Button label="查询" click="doQueryUser()"/>
		</mx:ControlBar>
	</mx:Panel>
</mx:Application>

注意其中,<RemoteObject/>的destination=”ananasAmf”与我们前面的services-config.xml中定义的<destination id=”ananasAmf”>一致。

注意编译以上程序的时候,请使用“-services services-config.xml”参数加载Service配置。
分享到:
评论

相关推荐

    flex python通过PyAMF通信

    通过理解AMF的工作原理,配置Python服务端和Flex客户端,以及利用PyAMF的高级特性,开发者可以构建出高性能的跨平台应用。无论是进行简单的数据传输,还是复杂的业务逻辑处理,PyAMF都能提供可靠的支持。对于希望在...

    python PyAmf安装包

    Python PyAMF(Action Message Format for Python)是一个开源库,用于在Python应用程序之间进行低级数据交换。这个库实现了Adobe的AMF协议,允许高效、快速地序列化和反序列化Python对象,常用于与Flex或Flash...

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

    myapp_python.rar则可能包含了Django项目的源码,包括settings.py(配置)、models.py(数据库模型)、views.py(视图函数)和urls.py(路由)等文件。 总的来说,这个项目展示了如何利用现代Web技术栈,通过Flex、...

    django_pyamf

    通常,开发者会将源代码、配置文件、静态文件和测试数据打包在这样的压缩文件中以便分享和部署。为了使用这些文件,你需要解压它们,然后根据提供的文档或说明进行操作。 在实践中,构建RIA数据库应用时,你还需要...

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

    **Python库PyAMF详解** PyAMF,全称为Python ActionScript Messaging Framework,是一个开源的Python库,主要用于在Python和Adobe Flash平台之间进行数据交换。它实现了AMF(Action Message Format)协议,这是一种...

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

    标题 "python语言web之旅" 涉及到的是使用Python进行Web开发的相关技术,包括Python本身、mod_python、PyAMF、Flex以及Apache等组件。这些技术在构建动态、交互式的Web应用程序时起着关键作用。 1. **Python**:...

    PyAMF-0.8.0-cp27-none-win32

    PyAMF-0.8.0-cp27-none-win32

    Python库 | PyAMF-0.4.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:PyAMF-0.4.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | PyAMF2-0.6.1.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:PyAMF2-0.6.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | PyAMF-0.5-py2.5-linux-x86_64.egg

    资源来自pypi官网。 资源全名:PyAMF-0.5-py2.5-linux-x86_64.egg

    PyAMF-开源

    PyAMF为Python提供了与Adobe Flash Player兼容的操作消息格式(AMF)支持。 它包括与Django,Pylons,Twisted,SQLAlchemy等Python网络框架的集成。 您可以从h下载最新版本

    PyAMF-0.8.0-cp27-none-win_amd64

    PyAMF-0.8.0-cp27-none-win_amd64

    SNS服务端解决方案(原创)

    尤其是MEMCACHE和MySQL的权重配置,对于实现负载均衡和故障迁移至关重要。不依赖PHP内置的Session机制,而是在memcache中存储类似Session的数据,避免了单点故障,增强了系统的可靠性。 #### 四、服务器硬件与软件...

    PyAMF-0.8.0-cp27-none-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    PyAMF-0.8.0-cp27-none-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl...

    AMF抓取flex页面数据

    - 对于AMF数据的解码,开发者可以使用开源库,如Python的pyamf或Java的BlazeDS,它们提供了解码AMF消息的能力。解码后的数据可以是JSON、XML或其他结构化格式,便于分析和处理。 7. **安全与隐私考虑** - 在进行...

    课题-win7、linux安装使用pip、mitmproxy.docx

    例如,你可能需要先安装 `netlib`, `pyopenssl`, `pyasn1`, `urwid`, `lxml`, `flask`,然后再安装 `pyamf`, `protobuf`, `pil`(或其替代库Pillow),以及 `nose`, `pathod`, `countershape`。如果遇到类似 ...

Global site tag (gtag.js) - Google Analytics