<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    這兩天在學習Google AppEngine的時候, 需要寫一個小程序,就是簡單的從數據庫里讀出數據,然后顯示出來。
    界面使用flex的,所以數據通信是想到了用amf,搜索到了兩個python的開源產品--pyAmf和Django Amf,后來看到Django Amf更新的并不頻繁,所以最后選了pyAmf。

    pyAmf還有一個優點是官方網站推薦了幾篇django與flex通信的文章里有一篇是中文的,哈哈。。。我喜歡中文。。。鏈接見
    http://blog.eshangrao.com/index.php/2008/02/16/447-flexpyamfdjango

    我的程序參考的也就是這篇文章,但代碼寫完后,程序并沒有通過,而是一直報找不到服務,折騰了兩天終于搞出來了。

    Django 服務端,

    1. 新建立一個工程testAMF,然后建立一個app--dailystory.

    2. 修改settings.py
       將dailystory添加到INSTALLED_APPS中。
       配置數據庫。

    3. 工程目錄中( whatidisplay 文件夾里 )的urls.py 的相關代碼如下:
    Python代碼
    1. from django.conf.urls.defaults import *  
    2. import settings  
    3.   
    4. urlpatterns = patterns('',  
    5.     (r'^dailystory/', include('testAMF.dailystory.urls')),  
    6.     (r'^admin/', include('django.contrib.admin.urls')),  
    7.     )  


    4. 在dailystory文件夾中添加一個urls.py文件
    Python代碼
    1. from django.conf.urls.defaults import *  
    2.   
    3. urlpatterns = patterns('',  
    4.     (r'^gateway/$', 'testAMF.dailystory.amfgateway.storyGateway'),  
    5.     (r'^(.*)$', 'django.views.static.serve', {'document_root':'dailystory/flex'}),  
    6.     )  


    5. 修改dailystory文件夾中的models.py 文件
    Python代碼
    1. from django.db import models  
    2.   
    3. class DailyStory(models.Model):  
    4.     content = models.TextField()  
    5.   
    6.     def __unicode__(self):  
    7.         return self.title  
    8.   
    9.     class Admin:  
    10.         pass  

    6. 在dailystory文件夾中添加一個amfgateway.py文件
    Python代碼
    1. from pyamf.remoting.gateway.django import DjangoGateway  
    2. from dailystory.models import DailyStory  
    3.   
    4. def getDailyStory(request):  
    5.     return DailyStory.objects.all()  
    6.   
    7.   
    8. storyGateway = DjangoGateway({  
    9.     'dailystory.getDailyStory': getDailyStory,  
    10.  })  

    Django的服務端就大功告成了


    Flex端更簡單
    Java代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
    3.     layout="absolute" creationComplete="initApp();">  
    4.       
    5.     <mx:Script>  
    6.         <![CDATA[  
    7.             import flash.events.NetStatusEvent;  
    8.               
    9.             import mx.collections.ArrayCollection;  
    10.             import mx.rpc.AsyncToken;  
    11.             import mx.rpc.AsyncResponder;  
    12.             import mx.rpc.events.FaultEvent;  
    13.             import mx.rpc.events.ResultEvent;             
    14.               
    15.             private function initApp():void  
    16.             {  
    17.                   
    18.                     var token:AsyncToken=djangoService.getDailyStory();  
    19.                 token.addResponder(new AsyncResponder(onGetDailyStory,faultHandler));  
    20.             }  
    21.               
    22.             private function onGetDailyStory(re:ResultEvent, token:Object=null):void  
    23.             {  
    24.                 var stories:Array = re.result as Array;  
    25.                 var storyCollection:ArrayCollection = new ArrayCollection(stories);  
    26.                 yesterdayStory.text = storyCollection.getItemAt(0).content;  
    27.             }  
    28.               
    29.             private function faultHandler(fe:FaultEvent, token:Object=null):void  
    30.             {  
    31.                 trace(fe.fault.faultDetail);  
    32.             }  
    33.         ]]>  
    34.     </mx:Script>  
    35.       
    36.     <mx:RemoteObject  
    37.         id="djangoService"  
    38.         destination="dailystory"  
    39.         showBusyCursor="true">  
    40.     </mx:RemoteObject>  
    41.       
    42.     <mx:TextArea id="yesterdayStory" x="582" y="130" height="118" width="242"/>  
    43. </mx:Application>  


    然后需要在于與上述flex文件同目錄中新建一個services-config.xml
    Xml代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <services-config>  
    3.     <services>  
    4.         <service id="dailyStoryService" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">  
    5.             <destination id="dailystory">  
    6.                 <channels>  
    7.                     <channel ref="dailyStoryChannel"/>  
    8.                 </channels>  
    9.                 <properties>  
    10.                     <source>*</source>  
    11.                 </properties>  
    12.             </destination>  
    13.         </service>  
    14.     </services>  
    15.     <channels>  
    16.         <channel-definition id="dailyStoryChannel" class="mx.messaging.channels.AMFChannel">  
    17.             <endpoint uri="http://localhost:8080/dailystory/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>  
    18.         </channel-definition>  
    19.     </channels>  
    20. </services-config>  


    在編譯時注意添加編譯參數-services services-config.xml

    然后將編譯后生成的在bin-debug文件夾中的文件復制到whatidisplay"dailystory"flex文件夾里

    運行django服務器
    Java代碼
    1. manage.py runserver 8080  

    訪問http://localhost:8080/dailystory/DailyStory.html



    這里與我參考的文章不同的有兩點,估計是pyAMF的更新造成的。我用的pyamf版本是0.3.1.
    第一個是在amfgateway.py文件中
    Java代碼
    1. storyGateway = DjangoGateway({  
    2.     'dailystory.getDailyStory': getDailyStory,  
    3.  })  

    我在給DjangoGateway賦值時使用了appName.method--即dailystory.getDailyStory
    據官方說這可能是個bug;)具體參看http://www.pyamf.org/wiki/DjangoHowto中的May be some problems here

    另外一處是 services-config.xml 文件中,我的destination id 給的就是django中App的名字。如果起其他名字的話,最后flex總是得不到服務。很奇怪。
    posted on 2009-05-01 23:36 seal 閱讀(668) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
    主站蜘蛛池模板: 亚洲成a人片在线不卡一二三区| 久久亚洲最大成人网4438| 国产青草亚洲香蕉精品久久| 亚洲天堂免费在线| 亚洲视频一区在线播放| 8x8×在线永久免费视频| 久久综合亚洲色一区二区三区| 久章草在线精品视频免费观看| 久久亚洲国产精品| 69xx免费观看视频| 亚洲精品无码不卡在线播放| 卡一卡二卡三在线入口免费| 污污视频免费观看网站| 在线观看国产区亚洲一区成人| 日韩a级无码免费视频| 精品亚洲国产成AV人片传媒| 国产啪精品视频网免费| 激情小说亚洲图片| 国产AV无码专区亚洲AV漫画| 无码国产精品一区二区免费模式 | 国产成人精品久久免费动漫| 亚洲av乱码一区二区三区| 日本特黄特色aa大片免费| 国产精品偷伦视频免费观看了| 久久亚洲AV无码精品色午夜麻| 黄页网站免费观看| 怡红院亚洲红怡院在线观看| 国产亚洲精品无码成人| 中文字幕乱码免费视频| 美女被免费网站在线视频免费| 国产偷v国产偷v亚洲高清| 国产成人免费网站| 国产免费久久精品99久久| 亚洲精品欧洲精品| 亚洲国产成人久久综合区| 免费播放一区二区三区| 在线亚洲v日韩v| 亚洲精品白色在线发布| 亚洲国产精品尤物yw在线| 国内精品乱码卡1卡2卡3免费| 男女猛烈无遮掩视频免费软件|