Gestión de rutas en Django REST Framework

  1. Enrutamiento personalizado (método manual)

from django.conf.urls import url
from aplicacion import vistas
urlpatterns = [
    url(r'^libros/$', vistas.VistaLibro.as_view()),
    url(r'^libros/(?P<id>\d+)$', vista.DetalleLibro.as_view()),
]

class VistaLibro(APIView):

    def get(self, request):
        conjunto_libros = models.Libro.objects.all()
        serializador = SerializadorLibro(conjunto_libros, many=True)
        return Response(serializador.data)

    def post(self, request):
        # Insertar nuevo registro
        print(request.data)

        serializador = SerializadorLibro(data=request.data)
        if serializador.is_valid():
            serializador.save()
            return Response(serializador.data)
        else:
            return Response(serializador.errors)

class DetalleLibro(APIView):
    def get(self, request, id):
        objeto_libro = models.Libro.objects.filter(id=id).first()
        serializador = SerializadorLibro(objeto_libro, many=False)
        return Response(serializador.data)

    def put(self, request, id):
        objeto_libro = models.Libro.objects.filter(id=id).first()
        serializador = SerializadorLibro(data=request.data, instance=objeto_libro)
        if serializador.is_valid():
            serializador.save()
            return Response(serializador.data)
        else:
            return Response(serializador.errors)

    def delete(self, request, id):
        models.Libro.objects.filter(id=id).delete()
        return Response("")

  1. Enrutaimento semiautomático (vista que hereda de ModelViewSet)

from django.conf.urls import url
from aplicacion import vistas
urlpatterns = [
    url(r'^editorial/$', vistas.VistaEditorial.as_view({'get':'list','post':'create'})),
    url(r'^editorial/(?P<id>\d+)/$', vistas.VistaEditorial.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
]

from rest_framework.viewsets import ModelViewSet

class VistaEditorial(ModelViewSet):
    queryset = models.Editorial.objects.all()
    serializer_class = SerializadorEditorial

  1. Enrutaimento automático (generación dinámica de rutas)

from django.conf.urls import url, include
from aplicacion import vistas
from rest_framework import routers

enrutador = routers.DefaultRouter()
enrutador.register('editorial', vistas.VistaEditorial)

urlpatterns = [
    url(r'', include(enrutador.urls))
]

from rest_framework.viewsets import ModelViewSet

class VistaEditorial(ModelViewSet):
    queryset = models.Editorial.objects.all()
    serializer_class = SerializadorEditorial

Formas de acceder a los recuross:

  • http://127.0.0.1:8000/editorial/
  • http://127.0.0.1:8000/editorial.json
  • http://127.0.0.1:8000/editorial/3
  • http://127.0.0.1:8000/editorial/3.json

Etiquetas: Django django-rest-framework API routing web-development

Publicado el 7-19 10:08