This post is only about setting up and installing Django and PyAMF. And a simple example of Flex Client using RemoteObject.
Click here to know about and download Django and PyAMF. Prerequisites are Python 2.5 or 2.6. 3.0 is not yet supported by both of them.
Download and extract Django to a Directory. cd to it.
python setup.py install
To setup projects and apps, read this, http://docs.djangoproject.com/en/dev/intro/tutorial01/#intro-tutorial01
Download and extract pyAMF to a dir and cd to it.
python setup.py install
copy the ‘pyAMF’ directory which is under ‘build/lib.win32-2.6′ directory inside your extracted PyAMF folder. Paste it under $PYTHONHOME\Lib\site-packages.
I have created a Project and App and dir structure looks like this.
D:\
DjangoProjects\
proj\
manage.py
settings.py
urls.py
empl\
models.py
tests.py
views.py
I have written a simple model and a method getAllItems inside models.py. Here is the code.
from django.db import models
def getAllItems(self):
rows = Employees.objects.all()
return rows
class Employees(models.Model):
emp_no = models.IntegerField(primary_key=True)
birth_date = models.DateField()
first_name = models.CharField(max_length=42)
last_name = models.CharField(max_length=48)
gender = models.CharField(max_length=3)
hire_date = models.DateField()
class Meta:
db_table = u'employees'
Now if we want to invoke getAllItems from Flex, we need to add a gateway file . Here is my gateway.py under empl app.
from pyamf.remoting.gateway.django import DjangoGateway
import proj.empl.models as models
services = {
'Employees': models
# could include other functions as well
}
echoGateway = DjangoGateway(services)
#UPDATE: Pass expose_request=false parameter to DjangoGateway to skip http request object as a mandated parameter.
Here, note that inside services, ‘Employees’ is going to be your ‘destination’ of RemoteObject in Flex.
Update your URLConf like this. I am re-directing URL anything ending with gateway/ to my gateway.py.
from django.conf.urls.defaults import *
from proj.empl import gateway
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
('^gateway/$', gateway.echoGateway)
)
We have successfully configured our Django/PyAMF. Let us write a simple Flex client to invoke getAllItems(). Our Remote Class here would be models with destination as ‘Employees’. I am using Flex 4 beta here.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" initialize="application1_initializeHandler(event)">
<fx:Script>
<![CDATA[
import mx.rpc.http.Operation;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
protected function test_resultHandler(event:ResultEvent):void
{
dg.dataProvider = event.result;
}
protected function test_faultHandler(event:FaultEvent):void
{
Alert.show(event.fault.faultDetail);
}
protected function application1_initializeHandler(event:FlexEvent):void
{
test.getAllItems();
}
]]>
</fx:Script>
<fx:Declarations>
<mx:RemoteObject id="test" endpoint="http://localhost:8000/gateway/"
destination="Employees" result="test_resultHandler(event)" fault="test_faultHandler(event)">
</mx:RemoteObject>
</fx:Declarations>
<mx:DataGrid id="dg"/>
</s:Application>
Start your Django development server from inside Django project.
python manage.py runserver
.
Run the application and check your data in DataGrid:)

After running my Flex client
The Scripting is very nicely explained!!