Django REST framework

Django REST framework makes it easy to build well-connected, self-describing RESTful Web APIs.


  • Creates awesome self-describing web browse-able APIs.
  • Clean, modular design, using Django's class based views.
  • Easily extended for custom content types, serialization formats and authentication policies.
  • Stable, well tested code-base.
  • Active developer community.

Full documentation for the project is available at

Issue tracking is on GitHub. General questions should be taken to the discussion group.


  • Python (2.5, 2.6, 2.7 supported)
  • Django (1.2, 1.3 supported)

Installation Notes

To clone the project from GitHub using git:

git clone

To clone the project from Bitbucket using mercurial:

hg clone

To install django-rest-framework in a virtualenv environment:

cd django-rest-framework
virtualenv --no-site-packages --distribute --python=python2.6 env
source env/bin/activate
pip install -r requirements.txt # django, coverage

To run the tests:

export PYTHONPATH=.    # Ensure djangorestframework is on the PYTHONPATH
python djangorestframework/runtests/

To run the test coverage report:

export PYTHONPATH=.    # Ensure djangorestframework is on the PYTHONPATH
python djangorestframework/runtests/

To run the examples:

pip install -r examples/requirements.txt # pygments, httplib2, markdown
cd examples
export PYTHONPATH=..
python syncdb
python runserver

To build the documentation:

pip install -r docs/requirements.txt   # sphinx
sphinx-build -c docs -b html -d docs/build docs html

To run the tests against the full set of supported configurations:

deactivate  # Ensure we are not currently running in a virtualenv

To create the sdist packages:

python sdist --formats=gztar,zip

Release Notes


  • Fix some throttling bugs.
  • X-Throttle header on throttling.
  • Support for nesting resources on related models.


  • Throttling support complete.


  • Couple of simple bugfixes over 0.2.0


  • Big refactoring changes since 0.1.0, ask on the discussion group if anything isn't clear. The public API has been massively cleaned up. Expect it to be fairly stable from here on in.
  • Resource becomes decoupled into View and Resource, your views should now inherit from View, not Resource.
  • The handler functions on views .get() .put() .post() etc, no longer have the content and auth args. Use self.CONTENT inside a view to access the deserialized, validated content. Use self.user inside a view to access the authenticated user.
  • allowed_methods and anon_allowed_methods are now defunct. if a method is defined, it's available. The permissions attribute on a View is now used to provide generic permissions checking. Use permission classes such as FullAnonAccess, IsAuthenticated or IsUserOrIsAnonReadOnly to set the permissions.
  • The authenticators class becomes authentication. Class names change to Authentication.
  • The emitters class becomes renderers. Class names change to Renderers.
  • ResponseException becomes ErrorResponse.
  • The mixin classes have been nicely refactored, the basic mixins are now RequestMixin, ResponseMixin, AuthMixin, and ResourceMixin You can reuse these mixin classes individually without using the View class.


  • Final build before pulling in all the refactoring changes for 0.2, in case anyone needs to hang on to 0.1.


  • Initial release.