API REST con Django

Noviembre 21/2015

About Me

  • Andrés González
  • 15+ años desarrollo web.
  • Cofounder Django Cali / CaliDev.
  • Python/Django Evangelist.
  • Emprendedor.
  • Software developer at swapps
  •      @andresgz00
  •       andresgz

Agenda

  • Por qué Python/Django?
  • Implementación API REST.
  • Demostración.

Python?

Python?

Qué es Python?

  • Lenguaje de programación interpretado.
  • Multiparadigma.
  • Orientado a objetos
  • Tipado dinámico
  • Sintaxis para código legible.
  • Open Source.

Aplicaciones de Python

  • Web Development
  • Database Access
  • Desktop GUIs
  • Scientific and Numeric Applications
  • Education
  • Network Programming
  • Software Development
  • Games

?

Django

The framework for perfectionists with deadlines

Creemos una REST API

Descripción del Problema

  1. Quiero crear una aplicación para crear tareas (to-dos).
  2. Quiero chequear las tareas completadas.
  3. Definir el título y la descripción.

 

Mi cliente es una aplicación móvil, la cual necesita lectura y almacenamiento de las tareas a través de una API REST.

# Cear el directorio del proyecto
mkdir django_todolist
cd django_todolist



# Instalar Django y Django REST framework
pip install django
pip install djangorestframework



# Crear un proyecto django
django-admin.py startproject django_todolist . 

cd django_todolist

# Creare aplicaciones para api y para los todos
django-admin.py startapp todo
django-admin.py startapp api

Paso 1: Crear proyecto

class ApiTestCase(TestCase):
    def setUp(self):
        self.factory = RequestFactory()
        self.client = Client()

    def test_api_url(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_todos_url(self):
        response = self.client.get('/todos')
        self.assertEqual(response.status_code, 200)

   
    def test_post_todo(self):
        todo_dict = {
            'name': 'My Todo',
            'description': 'My Todo Description',
        }

        response = self.client.post('/todos', todo_dict)
        self.assertEqual(response.status_code, 201)


  

Paso 2: Unit Testing - Qué queremos probar?


# Modificar el archivo todo/models.py

from django import models

class Todo(models.Model):
    """
    Todo Model: name, description, created
    """
    name = models.CharField(max_length=100)
    description = models.TextField(default="")
    checked = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)

Paso 3: Creamos el modelo

from rest_framework import serializers
from django_todolist.todo.models import Todo

# api/serializers
class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo

Paso 4: Creamos el serializer

from rest_framework import viewsets
from django_todolist.todo.models import Todo
from django_todolist.api.serializers import TodoSerializer


class TodoViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows to view or edit todos
    """
    queryset = Todo.objects.all().order_by('-created')
    serializer_class = TodoSerializer

Paso 5: Creamos el View

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


router = routers.DefaultRouter(trailing_slash=False)
router.register(r'todos', views.TodoViewSet)

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

Paso 6: URLS

INSTALLED_APPS = (
    ...
    'rest_framework',
)

# Para el ejemplo no usaremos autenticación
#REST_FRAMEWORK = {
#    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
#    'PAGE_SIZE': 10
#}

Paso 7: Settings

>>> python manage.py test

Creating test database for alias 'default'...
...............
----------------------------------------------------------------------
Ran 15 tests in 0.313s

OK
Destroying test database for alias 'default'...

Paso 8: Ejecutar Tests

#En la consola ejecuto:


#Crear tablas en la base de datos
python manage.py migrate

#Ejecutar servidor de desarrollo

python manage.py runserver


# Ready to go!

Paso 9: Ejecutar aplicación

Paso 10: Demostración

Fácil, No?

Write us:

jobs@swapps.co

Are you the next Rockstart developer?

Gracias!

@calidevco

@djangocali

@swappsco

Referencias

  • https://www.djangoproject.com/
  • http://www.django-rest-framework.org/

API Rest con Django

By swapps

API Rest con Django

Una introducción a Python/Django y su aplicación para la aplicación de una API Restful con Django REST Framework.

  • 778