Django 开发随笔(三)
Django 与 Flex
接上篇,如何将一个做好的flex编译出来的swf文件插入到django的模板(html)里?在上一篇中我们做了一个小例子,要想嵌入到html里,两个文件肯定不能少,首先是swf文件,这是核心,第二个是services-config.xml文件,这是swf与django打交道的契约。
有一点需要注意,在编译swf文件时,一定注意项目->属性里设置:
好了把我们编译好的swf (我的是FlexTest.swf)文件和services-config.xml放到一个工程resources/flash下面(没有要求,具体看项目),在我们的模板里加入:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="FlexTest">
<param name="movie" value="resources/flash/FlexTest.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<object type="application/x-shockwave-flash" data="resources/flash/FlexTest.swf" width="100%" height="100%">
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<p>
Either scripts and active content are not permitted to run or Adobe Flash Player version
10.0.0 or greater is not installed.
</p>
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
</a>
</object>
</object>
同时记得修改urls.py保证/resources/flash/FlexTest.swf能被访问到。访问我们的页面,可以成功显示swf文件:
但当点击的时候会出现异常,其中包含faultCode="Channel.Security.Error",而且从我们的控制台中看到在访问swf文件之后程序尝试访问crossdomain.xml
所以很明显是flash的跨域问题。
解决方法是 django-flashpolicies (这里)下载.
安装django-flashpolicies后在django项目的settings的INSTALLED_APPS里加上一行 'flashpolicies', 同时修改urls加上一行 (r'^crossdomain.xml$','flashpolicies.views.simple',{'domains':['*']}),
再次访问,Bingo,这次成功了。