Django

../../_images/django-logo.png

Introduction

The Django Remoting gateway included in PyAMF allows you to expose functions in Django (0.96 or newer) to AMF clients and servers.

Example

Exposing functions for AMF remoting is simple by defining a gateway (a dispatcher) like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# yourproject/yourapp/amfgateway.py

from pyamf.remoting.gateway.django import DjangoGateway

def echo(request, data):
    return data

services = {
    'myservice.echo': echo
    # could include other functions as well
}

echoGateway = DjangoGateway(services)

The request in the first argument to the echo function corresponds to the request object passed to every Django view function. To disable this function add expose_request=False when instantiating the DjangoGateway. As in:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# yourproject/yourapp/amfgateway.py

from pyamf.remoting.gateway.django import DjangoGateway

def echo(data):
    return data

services = {
    'myservice.echo': echo
    # could include other functions as well
}

echoGateway = DjangoGateway(services, expose_request=False, debug=True)

The instance echoGateway is a callable object suitable to be used as a Django view. To insert it into your url structure add it to your urlconf:

1
2
3
4
5
6
7
# yourproject/urls.py

urlpatterns = patterns('',

    # AMF Remoting Gateway
    (r'^gateway/', 'yourproject.yourapp.amfgateway.echoGateway'),
)

To test the gateway you can use a Python AMF client like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import logging
	
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'
)

from pyamf.remoting.client import RemotingService

url = 'http://127.0.0.1:8000/gateway/'
gw = RemotingService(url, logger=logging)
service = gw.getService('myservice')

print service.echo('Hello World!')

Useful Resources

ByteArray
ByteArray example using Flex and Django.
Interactive Python Shell
Python Shell example with Flex and Django.
http://api.pyamf.org/0.5.1/toc-pyamf.remoting.gateway.django-module.html
DjangoGateway in the API documentation.
http://joelhooks.com/2008/09/21/django-authorization-from-flex-air-actionscript-via-pyamf
Joel Hooks - Communication with Django from Flex