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

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

铁门关网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联建站于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

使用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)}  
  2. @author:U{kokkowon}  
  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端的实例,等有时间再行补上。

文章名称:使用PyAmf来实现Flex与Django的通信
本文网址:http://www.shufengxianlan.com/qtweb/news30/171130.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联