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.
$ 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
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
}
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')
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
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'))
]
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 ...