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
- Quiero crear una aplicación para crear tareas (to-dos).
- Quiero chequear las tareas completadas.
- 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?
El código:

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