# Django

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

    import logging

    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'
    )

    from pyamf.remoting.client import RemotingService

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

    print service.echo('Hello World!')

## Useful Resources

http://pyamf.org/wiki/ByteArrayExample
  ByteArray example using Flex and Django.
http://pyamf.org/wiki/ShellExample
  Python Shell example with Flex and Django.
http://api.pyamf.org/pyamf.remoting.gateway.django.html
  DjangoGateway in the API documentation.
http://joelhooks.com/2008/01/05/pyamf-communication-with-django-from-flex
  Joel Hooks - Communication with Django from Flex