From 330c13296de35d4055c30b5b3642421707565e2b Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 25 Nov 2014 16:04:38 +0000 Subject: Update documentation --- tutorial/quickstart.html | 380 ----------------------------------------------- 1 file changed, 380 deletions(-) delete mode 100644 tutorial/quickstart.html (limited to 'tutorial/quickstart.html') diff --git a/tutorial/quickstart.html b/tutorial/quickstart.html deleted file mode 100644 index 07d38da8..00000000 --- a/tutorial/quickstart.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - Quickstart - Django REST framework - - - - - - - - - - - - - - - - - - - - -
- - - -
-
- - - - -
- - - -
-

Quickstart

-

We're going to create a simple API to allow admin users to view and edit the users and groups in the system.

-

Project setup

-

Create a new Django project named tutorial, then start a new app called quickstart.

-
# Create the project directory
-mkdir tutorial
-cd tutorial
-
-# Create a virtualenv to isolate our package dependencies locally
-virtualenv env
-source env/bin/activate  # On Windows use `env\Scripts\activate`
-
-# Install Django and Django REST framework into the virtualenv
-pip install django
-pip install djangorestframework
-
-# Set up a new project with a single application
-django-admin.py startproject tutorial .
-cd tutorial
-django-admin.py startapp quickstart
-cd ..
-
-

Now sync your database for the first time:

-
python manage.py syncdb
-
-

Make sure to create an initial user named admin with a password of password. We'll authenticate as that user later in our example.

-

Once you've set up a database and got everything synced and ready to go, open up the app's directory and we'll get coding...

-

Serializers

-

First up we're going to define some serializers. Let's create a new module named tutorial/quickstart/serializers.py that we'll use for our data representations.

-
from django.contrib.auth.models import User, Group
-from rest_framework import serializers
-
-
-class UserSerializer(serializers.HyperlinkedModelSerializer):
-    class Meta:
-        model = User
-        fields = ('url', 'username', 'email', 'groups')
-
-
-class GroupSerializer(serializers.HyperlinkedModelSerializer):
-    class Meta:
-        model = Group
-        fields = ('url', 'name')
-
-

Notice that we're using hyperlinked relations in this case, with HyperlinkedModelSerializer. You can also use primary key and various other relationships, but hyperlinking is good RESTful design.

-

Views

-

Right, we'd better write some views then. Open tutorial/quickstart/views.py and get typing.

-
from django.contrib.auth.models import User, Group
-from rest_framework import viewsets
-from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
-
-
-class UserViewSet(viewsets.ModelViewSet):
-    """
-    API endpoint that allows users to be viewed or edited.
-    """
-    queryset = User.objects.all()
-    serializer_class = UserSerializer
-
-
-class GroupViewSet(viewsets.ModelViewSet):
-    """
-    API endpoint that allows groups to be viewed or edited.
-    """
-    queryset = Group.objects.all()
-    serializer_class = GroupSerializer
-
-

Rather than write multiple views we're grouping together all the common behavior into classes called ViewSets.

-

We can easily break these down into individual views if we need to, but using viewsets keeps the view logic nicely organized as well as being very concise.

-

Notice that our viewset classes here are a little different from those in the frontpage example, as they include queryset and serializer_class attributes, instead of a model attribute.

-

For trivial cases you can simply set a model attribute on the ViewSet class and the serializer and queryset will be automatically generated for you. Setting the queryset and/or serializer_class attributes gives you more explicit control of the API behaviour, and is the recommended style for most applications.

-

URLs

-

Okay, now let's wire up the API URLs. On to tutorial/urls.py...

-
from django.conf.urls import url, include
-from rest_framework import routers
-from tutorial.quickstart import views
-
-router = routers.DefaultRouter()
-router.register(r'users', views.UserViewSet)
-router.register(r'groups', views.GroupViewSet)
-
-# Wire up our API using automatic URL routing.
-# Additionally, we include login URLs for the browseable API.
-urlpatterns = [
-    url(r'^', include(router.urls)),
-    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
-]
-
-

Because we're using viewsets instead of views, we can automatically generate the URL conf for our API, by simply registering the viewsets with a router class.

-

Again, if we need more control over the API URLs we can simply drop down to using regular class based views, and writing the URL conf explicitly.

-

Finally, we're including default login and logout views for use with the browsable API. That's optional, but useful if your API requires authentication and you want to use the browsable API.

-

Settings

-

We'd also like to set a few global settings. We'd like to turn on pagination, and we want our API to only be accessible to admin users. The settings module will be in tutorial/settings.py

-
INSTALLED_APPS = (
-    ...
-    'rest_framework',
-)
-
-REST_FRAMEWORK = {
-    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
-    'PAGINATE_BY': 10
-}
-
-

Okay, we're done.

-
-

Testing our API

-

We're now ready to test the API we've built. Let's fire up the server from the command line.

-
python ./manage.py runserver
-
-

We can now access our API, both from the command-line, using tools like curl...

-
bash: curl -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
-{
-    "count": 2,
-    "next": null,
-    "previous": null,
-    "results": [
-        {
-            "email": "admin@example.com",
-            "groups": [],
-            "url": "http://127.0.0.1:8000/users/1/",
-            "username": "admin"
-        },
-        {
-            "email": "tom@example.com",
-            "groups": [                ],
-            "url": "http://127.0.0.1:8000/users/2/",
-            "username": "tom"
-        }
-    ]
-}
-
-

Or directly through the browser...

-

Quick start image

-

If you're working through the browser, make sure to login using the control in the top right corner.

-

Great, that was easy!

-

If you want to get a more in depth understanding of how REST framework fits together head on over to the tutorial, or start browsing the API guide.

-
-
-
-
- -
-
- - - - - - - - - - - -- cgit v1.2.3