| Author: Eduardo Enriquez

Django rest framework: tutorial - Parte II

En el post anterior habiamos resuelto la intalaci贸n de Django y de Django-Rest-Framework. Tambi茅n habiamos creado el proyecto y la app api. Ahora es momento de delegarle el manejo de un subgrupo de urls a mi app.

0. Creaci贸n de superusuario y creaci贸n de migraciones de base de datos:

Luego de tener instalado todo lo que necesitamos es necesario crear la base de datos (en este caso usamos el sqlite que viene por default) y pedirle a django que chequee si hubo alguno cambio en nuestro c贸digo que amerite un cambio en la base de datos (migraci贸n). Esto 煤ltimo se llama makemigrations, y efectuar el cambio se llama migrate. Tambi茅n es necesario crear un superusuario.

# Dentro de nuestra carpeta, donde est谩 el manage.py
python manage.py makemigrations

# Corremos las migraciones
python manage.py migrate

# Creamos un superusuario
python manage.py createsuperuser

Una vez que tenemos todo esto podemos correr nuestro ambiente de desarrollo para ver que todo funciona bien.

python manage.py runserver

El runserver levanta un servidor de desarrollo en el puerto 8000 y est谩 atento a los cambios del c贸digo ( pero no debe utilizarse para producci贸n). As铆 que luego de correr dicho comando basta con ir a http://localhost:8000 para ver el servidor andando.

Cualquier duda, mandame un mail o un msj a traves de contacto y vemos que pasa.

1. Manejo de urls

Nuestro proyecto website, tiene un archivo de nombre urls.py. Este archivo es el dispatcher de las urls. Esto es todo pedido http que ingresa a nuestro django se resuelve primero en este archivo urls.py que tiene nuestro proyecto. Ah铆 le indicamos las directivas que tiene que realizar. As铆 django sabe que toda url (quitando el dominio) que comience con la palabra "admin" la va a manejar la app admin que viene con django (por eso el from django contrib import admin).

Y toda url que comience con la palabra "api" la va a manejar nuestra app api que creamos en el tutorial pasado.

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^api/$', include('api.urls'))),
    url(r'^admin/', include(admin.site.urls)),
]

Para que este pasamanos sea bien granular. Todo lo que empiece con la palabra api lo va a manejar el archivo urls de mi app api. Por esto es que aparece el 'api.urls'.

Pero cuando creamos una app con django el archivo urls.py no viene por default. Es algo que es optativo. Por esto debemos crear el archivo urls dentro de mi app api.

touch api/urls.py

Bueno vamos a editar dicho archivo y vamos a ubicar un manejo de usuarios. Usuarios y grupos ya vienen con django por default y por esto es un buen ejemplo para ver como funciona el manejo de urls.

from django.conf.urls import url

from rest_framework import routers

from . import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

urlpatterns += router.urls

Ac谩 basicamente estamos usando el defaultRouter de rest-framework para manejar las urls de nuestra api y luego se lo apendeamos, lo agregamos al urlpatterns que habiamos modificado en nuestro urls.py de nuestro proyecto (docu oficial de routers de rest-framework).

Asi que si vamos a http://localhost:8000/admin vamos a ir al admin de django y nos logueamos con nuestro superuser:

Logueo con superuser

y si vamos a http://localhost:8000/api/users estaremos frente a la interfaz web que nos ofrece django rest framwork (si estamos logueados)

django rest framework

Django rest framework no trae una 煤nica manera de hacer las cosas. Por lo general, sigue el estilo de Django y trae cosas ya resueltas para los casos m谩s comunes y trae cosas mas simples para que uno se encarge de toda la implementaci贸n (que por lo general se usa para cosas m谩s complejas o m谩s peculiares o especificas de nuestra necesidad).

En particular con las urls, podemos no usar un defaultRouter y usar como habiamos visto al principio:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'users/^', views.UserList.as_view(), name="user-list"),

]

Related Posts