Flex+pyAmf+django连接实例

安装后台语言环境及其步骤见官方网站
python  http://www.python.org/download/
django.  http://www.djangoproject.com/download/
pyAmf  http://pyamf.org/wiki/Download
该例使用django+pyAmf+Flex,数据库使用Django自带的数据库sqlite3,以及其自带的server

一 安装好环境后,部署
1新建一个工程(工程名xaajiee)
 命令行模式敲入django-admin.py startproject xaajiee
 进入项目目录Cd xaajiee
2新建一个应用 manage.py startapp job
 在应用文件夹中的models.py中建立数据模型,编辑该文件
 建立两个表:    company公司表,存放公司名称
                      Jobs职位表,存放职位信息。并建立外键关系。

from django.db import models

class Company(models.Model):
    name = models.CharField(max_length=80)
    def __unicode__(self):
        return self.name

class Jobs(models.Model):
    id=models.CharField(max_length=8,primary_key=True)
    title= models.CharField(max_length=40)
    address=models.CharField(max_length=40)
    dep = models.ForeignKey(Company)
    def __unicode__(self):
        return self.title

 

3激活应用并配置数据库文件:修改Setting.py

 DATABASE_ENGINE = 'sqlite3'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = './data.db'
。。。。
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'xaajiee.job',
)

4自动创建表结构 python manage.py syncdb
  提示输入超级用户密码

5进入python shell

写入Company表数据

>>>from xaajiee.job.models import Company,Jobs
>>>dep1=Company(name='11company')
>>>dep1.save()
>>>dep2=Company(name='22company')
>>>dep2.save()

写入jobs表数据
>>>dep1.jobs_set.create(id='001',title='aaa',address='beijing')
>>>dep1.jobs_set.create(id='002',title='bbb',address='beijing')
>>>dep2.jobs_set.create(id='011',title='ccc',address='beijing')
>>>dep2.jobs_set.create(id='012',title='ddd',address='beijing')

 

5搭建Flex和Django的桥梁:PyAmf已安装(注:如果是python2.5版本执行下面语句安装)

python setup.py install --disable-ext

 

接着在我们的Django工程目录下创建一个amfgateway.py文件

from pyamf.remoting.gateway.django import DjangoGateway
from xaajiee.job.models import Company,Jobs

def getAllCompany(request):
    return Company.objects.all()

def getDepAllJobs(request,depID):
    dep=Company.objects.get(id=depID)
    return dep.jobs_set.all()

def updateJobs(request,jobsID,jobsTitle,depID):
    jobs=Jobs.objects.get(id=jobsID)
    jobs.title=jobsTitle
    jobs.depID=depID

usersGateway = DjangoGateway({
    'amfp.getDepAllJobs':getDepAllJobs,
    'amfp.getAllCompany':getAllCompany,
    'amfp.updateJobs':updateJobs
})

 6修改urls.py 写入:

(r'^xaajiee/gateway/', 'xaajiee.amfgateway.usersGateway'),  

 

二 Flex端

1新建services-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>  
<services-config>  
    <services>  
        <service id="ananasService" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">  
            <destination id="amfp">  
                <channels>  
                    <channel ref="ananasChannel"/>  
                </channels>  
                <properties>  
                    <source>*</source>  
                </properties>  
            </destination>  
        </service>  
    </services>  
    <channels>  
        <channel-definition id="ananasChannel" class="mx.messaging.channels.AMFChannel">  
            <endpoint uri="http://localhost:8000/xaajiee/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>  
        </channel-definition>  
    </channels>  
</services-config> 

@@编译该文件:工程右键属性 Flex Compiler添加内容
   -locale en_US -services "services-config.xml"
@@注意其中的destination的id与amfgateway文件中的调用一致
usersGateway = DjangoGateway({
    'amfp.getDepAllJobs':getDepAllJobs,
    'amfp.getAllCompany':getAllCompany,
   'amfp.updateJobs':updateJobs
2 mxml文件内容

<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="getAllCompany()" fontSize="12">  
    <mx:Script>  
        <![CDATA[  
            import mx.rpc.AsyncToken;  
            import mx.rpc.AsyncResponder;  
            import mx.rpc.events.FaultEvent;  
            import mx.rpc.events.ResultEvent;  
            import mx.controls.Alert;  
           
            [Bindable]  private var depAC:Array;
            [Bindable]  private var jobsAC:Array; 
              
            //AsyncToken很酷的特性就是它是动态类。这意味着,当你进行远程调用时可以添加属性到token上,然后result/fault处理函数中读取这些属性。
            private function getAllCompany():void{  
                var token:AsyncToken=djangoService.getAllCompany();  
                token.addResponder(new AsyncResponder(AfterGetDeps,falutHandler));  
            }    
            private function AfterGetDeps(result:Object, token:Object=null):void{  
                var evt:ResultEvent=result as ResultEvent;  
                depAC=evt.result as Array;  
            }  
 
            private function doQueryJobs():void{  
                var token:AsyncToken=djangoService.getDepAllJobs(dep_cb.selectedItem.id);  
                token.addResponder(new AsyncResponder(AfterGetJobs,falutHandler));  
            }  
            private function AfterGetJobs(result:Object, token:Object=null):void{  
                var evt:ResultEvent=result as ResultEvent;  
                jobsAC=evt.result as Array;  
            }  
            
            private function falutHandler(error:Object, token:Object=null):void{  
                var evt:FaultEvent=error as FaultEvent;  
                Alert.show(evt.message.toString());  
            }  
        ]]>  
    </mx:Script>  
    <mx:RemoteObject  
        id="djangoService"  
        destination="amfp"  
        showBusyCursor="true"/>  
    <mx:Panel title="用户管理">  
        <mx:DataGrid dataProvider="{jobsAC}">  
        <mx:columns>  
            <mx:DataGridColumn dataField="id" headerText="序号" width="100"/>  
            <mx:DataGridColumn dataField="title" headerText="职位" width="200"/>  
        </mx:columns>  
    </mx:DataGrid>  
        <mx:ControlBar>  
            <mx:ComboBox id="dep_cb" dataProvider="{depAC}" labelField="name" width="148"/>  
            <mx:Button label="查询" click="doQueryJobs()"/>  
        </mx:ControlBar>  
    </mx:Panel>  
</mx:Application> 

   run application最终运行结果页面:

       (别忘了启动服务器 进入工程目录 manage.py runserver)

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值