Django与Flash的结合

19 views
Skip to first unread message

Azureon

unread,
Sep 3, 2007, 5:29:28 AM9/3/07
to python.cn
相信大家对于Flash还是很熟悉的,shockwave Flash的浏览器插件在网络上也是相当普及。它的应用很广泛,不仅可以作为浏览器插件,还
可以独立于播放器进行播放。从手机到台式机,从游戏应用到教育应用到工作报告都可以用它来表现。它还是一个极富扩展性的RIA客户端,adobe在收购
Macromedia公司后,继续强化了Flash的RIA应用。新的ActionScript 3.0将原先的Flash Remoting
Components集成后,变成了一个大的flash.net Package。Flash可以适用多种网络技术,XML-RPC,
SOAP,AMF-RPC.我们这篇主要说的是用Flash AMF-RPC的方式远程调用Django的服务,其它的方式我们以后再说。(例如简单的
request和response功能)

既然是python社区,大家应该对Django都比较熟悉,我就不多提了。它是一个提供快速开发web框架。

Flash 与 Django 的关系
因为Django不涉及前端,而只提供后台服务。Flash也同样,只需要处理前端,并与后台通迅。它们之间通过AMF-RPC的中间件方式直接调
用。
AMF-RPC是使用AMF数据格式实现的远程方法调用,它是一个应用程序服务器网关,在Flash应用程序和远程服务之间提供一个相互通迅的网络通
道,在这个通道之间舆的是AMF格式的数据。它可以对数据类型自动转换,可以转换成ActionScript代码数据类型,也可以转成服务器程序数据类
型。AMF是一个二进制格式,将Flash程序和后台服务之间的通迅信息序列化,传输速度非常快。

安装环境
先装好Django
然后装上djangoamf-x.x.zip 的模块,这个一个日本人写的。完全由python写的,更新速度还挺快,就是文档还比较少。
这儿是网址
http://djangoamf.sourceforge.jp/index.php?UserManual_en

创建Django的Flash RIA应用
在settings.py中加上'amf.django.middleware.AMFMiddleware',

例:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'amf.django.middleware.AMFMiddleware',
)

再加上几个变量设置:
AMF_GATEWAY_PATH = '/gateway/'

AMF_LOG_LEVEL = 'INFO'
AMF_LOG_FILE = '/path/to/log.txt' #这个路径改成实际路径
AMF_LOG_FILE_ENCODING = 'utf8'
AMF_LOG_FILE_MODE = 'a'

然后在views.py中加上需要调用的服务函数, 如sendback
最后在Flash的ActionScript中调用服务。

import remoting.*;
import flash.net.Responder;

var gatewayUrl:String = "http://127.0.0.1/gateway/";
var serviceName:String = "calculateService";
var serviceFactory:ServiceFactory =
ServiceFactory.getInstance(gatewayUrl);
var service:RemotingService = serviceFactory.getService(serviceName);

//trace(service);
send_btn.addEventListener(MouseEvent.MOUSE_UP, clickHandler);
function clickHandler(event:MouseEvent):void {
var backValue:PendingCall = service.sendback(send_txt.text); #这个是在
views.py中定义的函数
backValue.responder = new Responder(handleResult, handleError);
}
function handleResult(ResultEvent:String):void {
back_txt.text = ResultEvent;
}

function handleError(result:int):void {
back_txt.text = "handleError is " + String(result);
}
stop();

我做了一个例子,在Flash端直接输入python语句,然后直接在Flash端就可以看到服务器端返回的结果。
比如在服务器端输入
a = 5
b = 6
a + b
结果为
5
6
11
这个例子可以用于调试服务器端的程序,直接查询设置服务器端的全局变量,或者执行另一个函数,import 另一个模块。
例子
http://bbs.chinaunix.net/attachment.php?aid=212016

Zoom.Quiet

unread,
Sep 3, 2007, 6:09:52 AM9/3/07
to pyth...@googlegroups.com, python-chinese列表, cpug-ea...@googlegroups.com
强!!果然有专门支持的Py 模块存在网络中哪............
收录了!
http://wiki.woodpecker.org.cn/moin/DjangoFlash


--
'''Time is unimportant, only life important!
过程改进的目标不是高品质产品,而是促生靠谱的人的组织!
'''http://zoomquiet.org
blog @ http://blog.zoomquiet.org/pyblosxom/
wiki @ http://wiki.woodpecker.org.cn/moin/ZoomQuiet
scrap @ http://floss.zoomquiet.org
share @ http://share.zoomquiet.org
douban@ http://www.douban.com/people/zoomq/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pls. usage OOo to replace M$ Office. http://zh.openoffice.org
Pls. usage 7-zip to replace WinRAR/WinZip. http://7-zip.org
You can get the truely Freedom 4 software.

Azureon

unread,
Sep 3, 2007, 8:21:42 AM9/3/07
to python.cn
发得有些仓促,有些地方写得少文缺字。
只是觉得网上研究Django+Flash的人太少了,资料也少。所以发些自己的心得,希望大家有兴趣一起研究。

关于Flash和AJAX,有人一定会觉得互不相关。其实不尽然,网页可容纳的东西很多,Flash只是其中的一个插件。它可以和AJAX互相取长补
短。AJAX主要的控制部分就是jsp,Flash调用jsp和被jsp调用非常方便。采用绑定事件的方法,方便而且效率高。

Arui Zen

unread,
Sep 3, 2007, 9:35:39 PM9/3/07
to pyth...@googlegroups.com
正好看到9月的程序员上有一篇《在应用中嵌入Flex UI》的文章(英文:http://www.artima.com/weblogs/viewpost.jsp?thread=208528),很感兴趣,希望这位兄弟多多分享心得 .

在07-9-3,Azureon <azureon....@gmail.com> 写道:

Azureon

unread,
Sep 3, 2007, 11:53:26 PM9/3/07
to python.cn
谢谢,我也是才研究这个的。

我在wiki.woodpecker申请了一块小地方,但是没有权限编辑,希望Zoom Quiet 能帮我开通。http://
wiki.woodpecker.org.cn/moin/Azureon?
action=edit&amp;template=HomepageTemplate

我想写些教程。
如python与Flash的结合
分别用wxpython和pythonwin创建Flash界面的应用程序。
在python和Flash中绑定事件,互相调用。

django与Flash的结合
通过Flash AMF-RPC实现django与Flash和AJAX的互相融合。

我再补充一些资料
http://simonf.com/amfpython/
这儿主要讲的是Open source Perl and Python implementation of Macromedia's AMF
protocol

On 9月4日, 上午9时35分, "Arui Zen" <dujun...@gmail.com> wrote:
> 正好看到9月的程序员上有一篇《在应用中嵌入Flex UI》的文章(英文

> :http://www.artima.com/weblogs/viewpost.jsp?thread=208528<http://www.artima.com/weblogs/viewpost.jsp?thread=208528>),很感兴趣,希望这位兄弟多多分享心得
> .
>
> 在07-9-3,Azureon <azureon.netsp...@gmail.com> 写道:


>
>
>
> > 发得有些仓促,有些地方写得少文缺字。
> > 只是觉得网上研究Django+Flash的人太少了,资料也少。所以发些自己的心得,希望大家有兴趣一起研究。
>
> > 关于Flash和AJAX,有人一定会觉得互不相关。其实不尽然,网页可容纳的东西很多,Flash只是其中的一个插件。它可以和AJAX互相取长补
> > 短。AJAX主要的控制部分就是jsp,Flash调用jsp和被jsp调用非常方便。采用绑定事件的方法,方便而且效率高。
>

> --
>
> DJ

fireflyc

unread,
Sep 4, 2007, 12:43:23 AM9/4/07
to python.cn
Flash的用途应该是重在"动画"如果是富用户界面的话~~~adobe的另一个东西能用flex。adobe官方的as参考手册上也是这样写的,如
果是想要富界面应该是flex,如果是重在动画那才是flash。

On 9月4日, 上午11时53分, Azureon <azureon.netsp...@gmail.com> wrote:
> 谢谢,我也是才研究这个的。
>
> 我在wiki.woodpecker申请了一块小地方,但是没有权限编辑,希望Zoom Quiet 能帮我开通。http://
> wiki.woodpecker.org.cn/moin/Azureon?
> action=edit&amp;template=HomepageTemplate
>
> 我想写些教程。
> 如python与Flash的结合
> 分别用wxpython和pythonwin创建Flash界面的应用程序。
> 在python和Flash中绑定事件,互相调用。
>
> django与Flash的结合
> 通过Flash AMF-RPC实现django与Flash和AJAX的互相融合。
>

> 我再补充一些资料http://simonf.com/amfpython/

Azureon

unread,
Sep 4, 2007, 2:05:45 AM9/4/07
to python.cn
抱歉,我没怎么用过flex。它现在还是个收费的软件,不过据说Adobe将在2007年年底完全开源它的Flex软件开发包。

Flex是作为Java应用程序服务器的模块形式存在的,用来解析MXML文件生成SWF文件.

至少需要了解两种语言才能开发Flex应用程序:MXML和ActionScript。MXML是一种XML标记语言,主要用来设置Flex的用户界
面,还包括一些不可见的元素,例如访问数据源、数据绑定等。

MXML和HTML最大的区别之一是MXML页面会被服务器编译成SWF文件,并通过FlashPlayer播放,提供了更强和更丰富的动态用户界
面。
你可以在一个或多个文件中编写MXML应用程序,MXML支持定义的组件,这些组件可以是MXML文件、AS文件或者使用FlashMX2004创建的
文件。在一些MXML标记中,可以包含对外部文件的引用。例如,你可以通过<mx:Script>标记的source属性来包含一个外部的AS脚本文
件。

我对ActionScript还比较熟悉,但是没用过MXML。看了一些介绍感觉它是想把html的功能整和在其中。

On 9月4日, 下午12时43分, fireflyc <firef...@gmail.com> wrote:
> Flash的用途应该是重在"动画"如果是富用户界面的话~~~adobe的另一个东西能用flex。

我感觉要富用户界面也不能太绝对,不能完全抛弃html。我们得分清Flash的优势和缺点。

这儿引用一位台湾朋友luar的看法:
Flash一直强调自己展示能力,可惜这又正正曝露出它天生致命点,文本(Text)处理能力不快不方便,我不会说它不强,它可以Embed
Font,Flash 8更可以控制Leading Kerning等,可惜它很慢,而且不方便使用者!文字根本是HTML天生原素,在Browser
里可以自由快速地滚动浏览,自由选取,更可以随便让使用者控制字体大小。在美工主导下的Flash字体,非常细小难于阅读,大量文字滚动起来又慢又吃力
(我以前批评过Flash Paper)。另一方面,HTML文字可以随Browser大小自由换行,Flash里又花费大量功
夫。Localization上,HTML有很多方法,例如套用不同Template代表不同语言版本等,文字因为储存在纯文本文件,可以给翻译容易处
理。在Flash里,又是另一个使人头痛问题,抽出来放在XML里?Dynamic TextField会失去美丽字体!结果又要花费美工复制多个
FLA语言版本,将来维护上又是一个极大烦恼。

在一些搜索页面上,经常要显示大量文字/图文夹杂搜寻资料时:
Flash就显得软弱无力,用DataGrid?它慢得可怕,又非常难Hack,CellRenderer不是一般开发者懂得。对于这样数据,要先搅清
楚它们是Tabular Data还是只需要Tabular Format,前者需要一个DataGrid形式显示,因为DataGrid可以用
Columns排序、做分页等。Tabular Format只不过在HTML上,用Table排列出,在Flash里用
duplicateMovieClip或者Flex的mx:Repeater。HTML Table列出,ScrollBar由Browser负责,快
速而方便;在Flash里则要自制ScrollBar,慢和不方便。

也许个人有个人的看法,用户有用户的体验。Adobe也不是吃干饭的,一定会有更好的解决方法。
我很愿意和朋友们一起讨论这些应用,大家互相学习。

> > > DJ- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Zoom.Quiet

unread,
Sep 4, 2007, 2:24:59 AM9/4/07
to pyth...@googlegroups.com
On 9/4/07, Azureon <azureon....@gmail.com> wrote:
> 谢谢,我也是才研究这个的。
>
> 我在wiki.woodpecker申请了一块小地方,但是没有权限编辑,希望Zoom Quiet 能帮我开通。http://
> wiki.woodpecker.org.cn/moin/Azureon?
> action=edit&amp;template=HomepageTemplate
>
你的 维基帐号是??
因为过往的经历,Spamer 攻击太厉害,得大伙自个儿确认是真身,
加入可信赖组就好了,
所以,得告訴大家你的维基帐号

> 我想写些教程。
排列欢迎哪!!
不过,建议使用专门文章名,
类似 http://wiki.woodpecker.org.cn/moin/DjangoFlash


> 如python与Flash的结合
> 分别用wxpython和pythonwin创建Flash界面的应用程序。
> 在python和Flash中绑定事件,互相调用。
>
> django与Flash的结合
> 通过Flash AMF-RPC实现django与Flash和AJAX的互相融合。
>
> 我再补充一些资料
> http://simonf.com/amfpython/
> 这儿主要讲的是Open source Perl and Python implementation of Macromedia's AMF
> protocol
>
> On 9月4日, 上午9时35分, "Arui Zen" <dujun...@gmail.com> wrote:
> > 正好看到9月的程序员上有一篇《在应用中嵌入Flex UI》的文章(英文
> > :http://www.artima.com/weblogs/viewpost.jsp?thread=208528<http://www.artima.com/weblogs/viewpost.jsp?thread=208528>),很感兴趣,希望这位兄弟多多分享心得
> > .
> >
> > 在07-9-3,Azureon <azureon.netsp...@gmail.com> 写道:
> >
> >
> >
> > > 发得有些仓促,有些地方写得少文缺字。
> > > 只是觉得网上研究Django+Flash的人太少了,资料也少。所以发些自己的心得,希望大家有兴趣一起研究。
> >
> > > 关于Flash和AJAX,有人一定会觉得互不相关。其实不尽然,网页可容纳的东西很多,Flash只是其中的一个插件。它可以和AJAX互相取长补
> > > 短。AJAX主要的控制部分就是jsp,Flash调用jsp和被jsp调用非常方便。采用绑定事件的方法,方便而且效率高。
> >
> > --
> >
> > DJ
>
> >
>

Azureon

unread,
Sep 4, 2007, 4:27:57 AM9/4/07
to python.cn
我的wiki帐号是Azureon
我的wiki主页是http://wiki.woodpecker.org.cn/moin/Azureon
谢谢 Zoom Quiet

Zoom.Quiet

unread,
Sep 4, 2007, 4:49:30 AM9/4/07
to pyth...@googlegroups.com
On 9/4/07, Azureon <azureon....@gmail.com> wrote:
> 我的wiki帐号是Azureon
http://wiki.woodpecker.org.cn/moin/TrustedGroup
DONE!
感谢分享!

> 我的wiki主页是http://wiki.woodpecker.org.cn/moin/Azureon
> 谢谢 Zoom Quiet
>
> >
>

fireflyc

unread,
Sep 4, 2007, 7:51:04 PM9/4/07
to python.cn
哦。是这样的,Flex并不是商业的,Flex的SDK你是可以免费使用的。很多编辑器支持MXML和AS的语法加亮的。收费的是adobe的Flex
开发工具--Flex Builder。
MXML不能算是语言,AS可以是。MXML的语法太简单了,如果是一个带代码提示的工具或是一个可视化的开发工具写MXML是建非常容易的事情,而
AS的语法也很简单,和javascript有非常多的相似处所以这两种技术不是重点。即使Flash的话也要懂AS还有Flash里面的一些东西。
RIA现在都是蜻蜓点水型的,不过我了解到很多朋友在实际的项目中试图去试用Flex。目前来讲很多RIA都是建立在javascript基础上
的。Ext、YUI、之类的。

Azureon

unread,
Sep 5, 2007, 2:04:53 AM9/5/07
to python.cn
对于Flash的RIA应用,我也是才刚开始。
Flash的RIA应用,adobe那儿主要是MicroSoft的.net,J2EE和PHP。
把Flash RIA应用到Python或者django上的还很少,各种各样的技术也是很杂。
我挺喜欢用Flash,对python也很喜欢。我一直想把它们融和起来使用。

djangoAMF也可以用于Flex上,毕竟swf文件、ActionScript都是一样的。djangoAMF的作者写的例子就用的是Flex。
里面既有MXML又有HTML,既有javascript又有ActionScript,还有django的模板和SQL,融和了很多东西。

有兴趣的话大家一起学习。

> > > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Reply all
Reply to author
Forward
0 new messages