2012-08-29 23:57:37 +04:00
|
|
|
# Django REST framework
|
|
|
|
|
2013-04-30 11:42:27 +04:00
|
|
|
**Awesome web-browseable Web APIs.**
|
2012-08-29 23:57:37 +04:00
|
|
|
|
2012-09-28 13:11:29 +04:00
|
|
|
[![build-status-image]][travis]
|
2012-09-09 19:56:04 +04:00
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
**Note**: Full documentation for the project is available at [http://django-rest-framework.org][docs].
|
2012-10-30 16:23:17 +04:00
|
|
|
|
2012-08-29 23:57:37 +04:00
|
|
|
# Overview
|
|
|
|
|
2013-04-29 15:08:21 +04:00
|
|
|
Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs.
|
2012-10-30 16:23:17 +04:00
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
Some reasons you might want to use REST framework:
|
2012-08-29 23:57:37 +04:00
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
* The Web browseable API is a huge useability win for your developers.
|
|
|
|
* Authentication policies including OAuth1a and OAuth2 out of the box.
|
|
|
|
* Serialization that supports both ORM and non-ORM data sources.
|
2013-04-30 17:34:42 +04:00
|
|
|
* Customizable all the way down - just use regular function-based views if you don't need the more powerful features.
|
2013-04-30 12:32:11 +04:00
|
|
|
* Extensive documentation, and great community support.
|
2012-10-30 16:23:17 +04:00
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
There is a live example API for testing purposes, [available here][sandbox].
|
2012-08-29 23:57:37 +04:00
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
**Below**: *Screenshot from the browseable API*
|
|
|
|
|
|
|
|
![Screenshot][image]
|
|
|
|
|
2012-08-29 23:57:37 +04:00
|
|
|
# Requirements
|
|
|
|
|
2013-02-15 13:05:55 +04:00
|
|
|
* Python (2.6.5+, 2.7, 3.2, 3.3)
|
2012-08-29 23:57:37 +04:00
|
|
|
* Django (1.3, 1.4, 1.5)
|
|
|
|
|
|
|
|
# Installation
|
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
Install using `pip`...
|
2012-08-29 23:57:37 +04:00
|
|
|
|
2012-10-26 22:55:23 +04:00
|
|
|
pip install djangorestframework
|
2012-12-27 21:53:07 +04:00
|
|
|
|
|
|
|
Add `'rest_framework'` to your `INSTALLED_APPS` setting.
|
|
|
|
|
|
|
|
INSTALLED_APPS = (
|
|
|
|
...
|
|
|
|
'rest_framework',
|
|
|
|
)
|
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
# Example
|
|
|
|
|
2013-05-02 15:08:05 +04:00
|
|
|
Let's take a look at a quick example of using REST framework to build a simple model-backed API for accessing users and groups.
|
2013-04-30 17:34:42 +04:00
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
Here's our project's root `urls.py` module:
|
2012-09-02 00:35:30 +04:00
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
from django.conf.urls.defaults import url, patterns, include
|
|
|
|
from django.contrib.auth.models import User, Group
|
|
|
|
from rest_framework import viewsets, routers
|
2012-09-02 00:35:30 +04:00
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
# ViewSets define the view behavior.
|
|
|
|
class UserViewSet(viewsets.ModelViewSet):
|
|
|
|
model = User
|
2012-09-02 00:35:30 +04:00
|
|
|
|
2013-04-30 11:33:33 +04:00
|
|
|
class GroupViewSet(viewsets.ModelViewSet):
|
|
|
|
model = Group
|
|
|
|
|
|
|
|
|
|
|
|
# Routers provide an easy way of automatically determining the URL conf
|
|
|
|
router = routers.DefaultRouter()
|
2013-05-07 20:01:54 +04:00
|
|
|
router.register(r'users', UserViewSet)
|
|
|
|
router.register(r'groups', GroupViewSet)
|
2013-04-30 11:33:33 +04:00
|
|
|
|
|
|
|
|
|
|
|
# Wire up our API using automatic URL routing.
|
|
|
|
# Additionally, we include login URLs for the browseable API.
|
|
|
|
urlpatterns = patterns('',
|
|
|
|
url(r'^', include(router.urls)),
|
|
|
|
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
|
|
|
|
)
|
2013-03-06 16:29:32 +04:00
|
|
|
|
2013-05-02 15:08:05 +04:00
|
|
|
We'd also like to configure a couple of settings for our API.
|
|
|
|
|
|
|
|
Add the following to your `settings.py` module:
|
|
|
|
|
|
|
|
REST_FRAMEWORK = {
|
|
|
|
# Use hyperlinked styles by default.
|
|
|
|
# Only used if the `serializer_class` attribute is not set on a view.
|
|
|
|
'DEFAULT_MODEL_SERIALIZER_CLASS':
|
|
|
|
'rest_framework.serializers.HyperlinkedModelSerializer',
|
|
|
|
|
|
|
|
# Use Django's standard `django.contrib.auth` permissions,
|
|
|
|
# or allow read-only access for unauthenticated users.
|
|
|
|
'DEFAULT_PERMISSION_CLASSES': [
|
|
|
|
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
Don't forget to make sure you've also added `rest_framework` to your `INSTALLED_APPS` setting.
|
|
|
|
|
|
|
|
That's it, we're done!
|
|
|
|
|
2013-04-30 11:40:52 +04:00
|
|
|
# Documentation & Support
|
2013-03-06 16:29:32 +04:00
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
Full documentation for the project is available at [http://django-rest-framework.org][docs].
|
2013-04-30 11:40:52 +04:00
|
|
|
|
|
|
|
For questions and support, use the [REST framework discussion group][group], or `#restframework` on freenode IRC.
|
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
You may also want to [follow the author on Twitter][twitter].
|
2013-04-30 11:40:52 +04:00
|
|
|
|
2012-08-29 23:57:37 +04:00
|
|
|
# License
|
|
|
|
|
2013-01-04 01:43:54 +04:00
|
|
|
Copyright (c) 2011-2013, Tom Christie
|
2011-03-09 11:18:06 +03:00
|
|
|
All rights reserved.
|
|
|
|
|
2011-12-16 14:06:02 +04:00
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
modification, are permitted provided that the following conditions are met:
|
2011-03-09 11:18:06 +03:00
|
|
|
|
2011-12-16 14:06:02 +04:00
|
|
|
Redistributions of source code must retain the above copyright notice, this
|
|
|
|
list of conditions and the following disclaimer.
|
|
|
|
Redistributions in binary form must reproduce the above copyright notice, this
|
|
|
|
list of conditions and the following disclaimer in the documentation and/or
|
|
|
|
other materials provided with the distribution.
|
2011-03-09 11:18:06 +03:00
|
|
|
|
2011-12-16 14:06:02 +04:00
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
|
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
|
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
|
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
2012-08-29 23:57:37 +04:00
|
|
|
|
2013-01-04 01:43:54 +04:00
|
|
|
[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.png?branch=master
|
2012-10-30 18:37:07 +04:00
|
|
|
[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
|
2012-08-29 23:57:37 +04:00
|
|
|
[twitter]: https://twitter.com/_tomchristie
|
2012-12-18 02:00:25 +04:00
|
|
|
[group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
|
2012-10-30 16:23:17 +04:00
|
|
|
[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
|
|
|
|
[sandbox]: http://restframework.herokuapp.com/
|
2012-11-15 02:24:18 +04:00
|
|
|
[rest-framework-2-announcement]: http://django-rest-framework.org/topics/rest-framework-2-announcement.html
|
2012-11-05 14:53:20 +04:00
|
|
|
[2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
|
2013-04-30 11:33:33 +04:00
|
|
|
[image]: http://django-rest-framework.org/img/quickstart.png
|
2012-10-30 16:23:17 +04:00
|
|
|
|
2013-03-06 16:29:32 +04:00
|
|
|
[tox]: http://testrun.org/tox/latest/
|
|
|
|
|
2013-04-30 12:32:11 +04:00
|
|
|
[tehjones]: https://twitter.com/tehjones/status/294986071979196416
|
|
|
|
[wlonk]: https://twitter.com/wlonk/status/261689665952833536
|
|
|
|
[laserllama]: https://twitter.com/laserllama/status/328688333750407168
|
|
|
|
|
2012-10-30 18:41:44 +04:00
|
|
|
[docs]: http://django-rest-framework.org/
|
2012-08-29 23:57:37 +04:00
|
|
|
[urlobject]: https://github.com/zacharyvoase/urlobject
|
|
|
|
[markdown]: http://pypi.python.org/pypi/Markdown/
|
|
|
|
[pyyaml]: http://pypi.python.org/pypi/PyYAML
|
2013-02-22 17:17:22 +04:00
|
|
|
[defusedxml]: https://pypi.python.org/pypi/defusedxml
|
2013-01-12 17:28:16 +04:00
|
|
|
[django-filter]: http://pypi.python.org/pypi/django-filter
|