dj-webmachine icon indicating copy to clipboard operation
dj-webmachine copied to clipboard

Django REST layer

dj-webmachine

dj-webmachine is an application layer that adds HTTP semantic awareness on top of Django and provides a simple and clean way to connect that to your applications' behavior. dj-webmachine also offers you the possibility to build simple API based on your model and the tools to create automatically docs and clients from it (work in progress).

dj-webmachine is released under the MIT license. See the LICENSE file for the complete license.

Copyright (c) 2010 Benoit Chesneau [email protected] Copyright 2010 (c) Hyperweek - http://hyperweek.net

Install +++++++

Make sure that you have a working Python_ 2.x >=2.5 installed and Django_ >= 1.1.

With pip


::
    
    $ pip install dj-webmachine

From source

Get the dj-webmachine code::

$ git clone https://github.com/benoitc/dj-webmachine.git
$ cd dj-webmachine

Or using a tarbal::

$ wget http://github.com/benoitc/dj-webmachine/tarball/master -o dj-webmachine.tar.gz
$ tar xvzf dj-webmachine.tar.gz
$ cd dj-webmachine-$HASH/

and install::

$ sudo python setup.py install

dj-webmachine in 5 minutes ++++++++++++++++++++++++++

We will quickly create an Hello world accepting HTML and JSON.

::

$ django-admin startproject helloworld
$ cd helloworld
$ python manage.py startapp hello

In the hello folder create a file named resources.py::

import json
from webmachine import Resource

class Hello(Resource):

    def content_types_provided(self, req, resp):
        """" define the content type we render accoridng the Accept
        header.
        """
        return ( 
            ("", self.to_html),
            ("application/json", self.to_json)
        )

    def to_html(self, req, resp):
        return "<html><body>Hello world!</body></html>\n"

    def to_json(self, req, resp):
        return "%s\n" % json.dumps({"message": "hello world!", "ok": True})

Add dj-webmachine and your hello app to INSTALLED_APPS in your settings::

INSTALLED_APPS = (
    ...
    'webmachine',
    'helloworld.hello'
)

Put your the Hello resource in your urls.py::

from django.conf.urls.defaults import *

from helloworld.hello.resource import Hello

urlpatterns = patterns('',
    (r'^$', Hello()),
)

Launch your application::

$ python manage.py runserver

Take a look! Point a web browser at http://localhost:8000/

Or with curl::

$ curl http://127.0.0.1:8000
<html><body>Hello world!</body></html>

$ curl http://127.0.0.1:8000 -H "Accept: application/json"
{"message": "hello world!", "ok": true}    

The first line ask the hello page as html while the second using the same url ask for JSON.

To learn how to do more interresting things, checkout some examples <http://benoitc.github.com/dj-webmachine/recipes.html>_ or read more documentations <http://benoitc.github.com/dj-webmachine/docs.html>_ .

.. _Python: http://python.org .. _Django: http://djangoproject.org