-
Notifications
You must be signed in to change notification settings - Fork 42
18 API with Tastypie
Django lets you return JSON from a view, but designing an API is a lot of work. Fortunately someone has already done that for you. We will use the Tastypie package.
The version of Tastypie that pip will find by default is not new enough for Django 1.8, so install the latest version from Github:
$ pip install -e git+https://github.com/django-tastypie/django-tastypie#egg=TastyPie
Tastypie offers an easy way to build an API: https://django-tastypie.readthedocs.org/en/latest/
In elevennote/settings.py
modify INSTALLED_APPS
and add
INSTALLED_APPS = [
...
`tastypie`,
]
In elevennote/urls.py
add in the following lines:
from tastypie.api import Api
from note.api.resources import NoteResource
v1_api = Api(api_name='v1')
v1_api.register(NoteResource())
...
url(r'^api/', include(v1_api.urls)),
Make a note/api/resources.py
and create a NoteResource
to define how the API will serve the note model.
from tastypie.resources import ModelResource
from ..models import Note
class NoteResource(ModelResource):
class Meta:
queryset = Note.objects.all()
allowed_methods = ['get']
Schema: http://localhost:8000/api/v1/note/schema/?format=json
List: http://localhost:8000/api/v1/note/?format=json
The URI for the note "details" view for any give item is given in the list. Here is an example one for a note with pk=5: /api/v1/note/5/
Note: in order to make the API more interesting we have loosened the restriction here that prevents seeing other users posts. (For that matter, our API is wide open. Anyone can access the data, even people who are not authenticated. We will get to that later.)