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 escrito para o PythonClub.
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.pyEdite
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
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.
Veja o código no GitHub.
Este tutorial é a parte 0/6 de uma série de posts sobre DRF escrito para o PythonClub.
Haverá continuação ...

