使用PyAmf来实现Flex与Django的通信

开发 后端
本文向大家介绍一下如何使用PyAmf来实现Flex与Django的通信,PyAmf本质上跟AmfPHP是雷同的。都是通过对AMF协议协议的支持来实现对Flash的交互过程。

在学习Flex的过程中,你可能会遇到使用PyAmf来实现Flex与Django的通信方面的问题,这里和大家分享一下,相信本文介绍一定会让你有所收获。

使用PyAmf来实现Flex与Django的通信

三年前,用过AmfPHP与Flash/Flex Remoting做过交互,最近接触Python,公司项目用的Flex做前端,所以接触了PyAmf。PyAmf本质上跟AmfPHP是雷同的。都是通过对AMF协议(ActionScriptMessageFormat)协议的支持来实现对Flash的交互过程。

一、首先,简单的介绍一下AMF协议格式。

AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash播放器与Flash
Remoting网关通信提供了一种轻量级的、高效能的通信方式。AMF最大的特色在于可直接将Flash内置对象,例如Object,Array,
Date,XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。它采用二进制编码,可以高度压缩数
据,因此非常适合用来传递大量的资料。数据量越大,FlashRemoting的传输效能就越高,远远超过Web
Service以及使用纯文本的传输方式的XML。

AMF协议是基于Http协议的,它的处理过程大致如下:
1、从客户端获取Http请求(Request)流。
2、对流进行反序列化(Deserialize),得到服务器端程序能够识别的数据,并建立响应(Response)消息。
3、找到相应的远程服务
4、调用服务器端方法,对流进行各种处理得到返回值。
5、序列化响应流
6、将序列化响应流发送Http响应给客户端。

二、安装配置PyAmf和Django

PyAmf目前的稳定版本是0.3,去官方网站下载压缩包,解压文件,执行pythonsetup.pyinstall即可完成安装。
至于Django的安装配置,我前面的文章已经讲过了,详细请参阅http://www.kokkowon.cn/archives/33。

下面我们来开发具体的实际应用。首先简单介绍下pyAMF.django的处理机制。
Pyamf通过pyamf.remoting.gateway.django模块来实现与django
Request、Response相对应处理机制。其中pyamf.remoting.gateway.django.DjangoGateway类是整
个处理流程的主干。我们仅仅需要在django中建立一个DjangoGateway的实例,这个实例通过urlmap对应到响应的处理函数,将把从底层
传递过来的Request解码,并映射到响应的Python对象,然后执行注册的RPC方法,返回一个Response,然后采用AMF协议格式将
Response编码,返回给django,django通过它本身的相关机制,将这个Response以http响应的方式返回给客户端。

1)创建DjangoGateway

首先创建Django项目,然后创建一个应用程序,我这里还叫做app应用,
django-admin.pystartprojectfortest
pythonmanage.pystartappapp
我前面的文章已经讲过了,详细请参阅http://www.kokkowon.cn/archives/33。

定义数据库模型:
app/models.py用于定义我们的数据库模型,将其修改如下:

"""
数据库模型

  1. @see:U{Djangohomepage(external)<http://djangoproject.com>}  
  2. @author:U{kokkowon<kokko313@gmail.com>}  
  3. @since:0.1.0  
  4. """  
  5. fromdjango.dbimportmodels  
  6. importdatetime  
  7.  
  8. #MysqlText类型  
  9. classMysqlTextField(models.Field):  
  10. defdb_type(self):  
  11. return'text'  
  12.  
  13. classFavorite:  
  14. TYPE_CHOICES=(  
  15. ('url','网址'),  
  16. ('music','音频'),  
  17. ('video','视频'),  
  18. )  
  19. type=models.CharField('类型',max_length=30,db_index=True,choices=TYPE_CHOICES)  
  20. title=models.CharField('标题',max_length=250)  
  21. body=models.CharField('内容',default='',max_length=255)  
  22. general=MysqlTextField('描述',default='',blank=True)  
  23. created=models.DateTimeField('添加时间',default=datetime.datetime.now,blank=True)  
  24.  
  25. def__unicode__(self):  
  26. returnself.title  
  27.  
  28. classUserFavorite(Favorite,models.Model):  
  29. user_id=models.CharField('用户ID',max_length=250,db_index=True)  
  30. type=Favorite.type  
  31. title=Favorite.title  
  32. body=Favorite.body  
  33. general=Favorite.general  
  34. created=Favorite.created  
  35.  
  36. classMeta:  
  37. db_table='user_favorites' 
  38. verbose_name='用户收藏夹' 
  39. verbose_name_plural='用户收藏夹列表' 
  40.  

以上定义了一个叫做user_favorites的表。关于Django里面model的定义说明请查看这里:http://docs.djangoproject.com/en/dev/

2)测试PyAmf
在fortest目录下,新建c.py

  1. frompyamf.remoting.clientimportRemotingService  
  2. importsys  
  3.  
  4. gateway=RemotingService('http://localhost:8000/app/gateway/')  
  5. adduserfavorite_service=gateway.getService('adduserfavorite')  
  6. edituserfavorite_service=gateway.getService('edituserfavorite')  
  7. userfavorite_service=gateway.getService('userfavorite')  
  8.  
  9. """  
  10. #添加用户收藏  
  11. """  
  12. rs=adduserfavorite_service('kokko','网址','163','http://www.163.com')  
  13. printrs['id']  
  14. print"----------------------------"  
  15. #编辑用户收藏  
  16. rs=edituserfavorite_service(2,'wwq','视频','sohu','http://www.sohu.com')  
  17. printrs  
  18. print"----------------------------"  
  19. #用户收藏列表  
  20. rs=userfavorite_service('user_id','kokko')  
  21. for_iteminrs:  
  22. print_item.title+''+_item.type+''+_item.user_id+''+_item.body  
  23. print"----------------------------"  
  24. sys.exit(0)  
  25.  

运行服务器:manage.pyrunserver
运行测试程序:pythonc.py将显示响应结果,如下图示例:

 


证明测试完全通过,Flex端可以使用相关接口和服务器进行通讯了。由于时间关系,我这里不再给出Flash端的实例,等有时间再行补上。

【编辑推荐】

  1. Flex4beta的Spark布局特性解析
  2. FlexBuilder4十大新特性闪亮登场
  3. Flex module用法指南
  4. Flex4Beta引入新元素功能更强大
  5. FlexBuilder开发方法及特点解析 

 

责任编辑:佚名 来源: ej38.com
相关推荐

2010-07-27 15:36:15

Flex swf

2017-12-19 15:24:21

DjangoPythonOracle

2010-08-06 16:07:55

Flex通信

2010-08-06 15:35:06

Flex服务器

2010-08-10 13:28:21

Flex代码格式化

2017-12-07 14:40:05

前端FlexCSS

2010-08-11 13:28:46

Flex行为

2021-11-16 10:45:35

WebSocketWebShellLinux

2011-03-16 09:05:29

iptablesNAT

2019-12-26 09:28:34

TCPPython通信

2010-08-12 13:34:13

Flex验证组件

2010-07-29 14:27:52

FlexWeb

2010-08-06 09:24:44

FlexFlash

2023-11-17 09:35:58

2010-08-06 16:15:57

Flex通信

2010-08-05 13:14:16

Flex布局

2010-08-09 15:52:28

2010-08-10 09:40:23

Flex与浏览器交互

2013-03-28 13:14:45

AIDL进程间通信Android使用AI

2010-08-13 10:01:46

Flex样式定义
点赞
收藏

51CTO技术栈公众号