Regis da Silva
Publicado em:

Tue 17 November 2015

←Home

Django Rest Framework Quickstart

Veremos aqui uma forma rápida de criar uma API REST com Django Rest Framework.

Este tutorial é a parte 0/6 de uma série de posts sobre DRF.

Obs: Tem coisas que é melhor nem traduzir. ;)

  • 0 - Quickstart
  • 1 - Serialization
  • 2 - Requests & Responses
  • 3 - Class based views
  • 4 - Authentication & permissions
  • 5 - Relationships & hyperlinked APIs
  • 6 - Viewsets & routers

Obs: se você não sabe Django sugiro que leia este tutorial antes.

Começando

$ virtualenv -p python3 env
$ source env/bin/activate
$ mkdir drf-quickstart
$ cd drf-quickstart
$ pip install django djangorestframework
$ pip freeze > requirements.txt
$ django-admin.py startproject myproject . # tem um ponto '.' aqui
$ python manage.py startapp core
$ python manage.py migrate
$ python manage.py createsuperuser  --username='admin' --email=''

Veja o meu requirements.txt

Django==1.8.6
argparse==1.2.1
djangorestframework==3.3.1
wsgiref==0.1.2

Editando settings.py

Abra o arquivo settings.py e em INSTALLED_APPS acrescente

INSTALLED_APPS = (
    ...
    'rest_framework',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
    'PAGE_SIZE': 10
}

Editando serializers.py

Crie o arquivo

$ cd core/
$ touch serializers.py

Edite

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')

Editando views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from core.serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

Editando urls.py

from django.conf.urls import url, include
from rest_framework import routers
from core import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

Rodando a API

Abra duas abas no terminal, numa rode a aplicação.

$ python manage.py runserver

drf02

Na outra teste a API.

curl -H 'Accept: application/json; indent=4' -u admin:admin http://127.0.0.1:8000/users/

onde admin:admin equivale a username:password.

Experimente com httpie

http -a admin:admin http://127.0.0.1:8000/users/

Atenção: se você receber erro 301, muito provavelmente é porque você esqueceu da barra / no final da url.

drf01

Veja o código no GitHub.

Haverá continuação ...

Topo
comments powered by Disqus