Cuando se trabaja en django resulta claro que hay muchas labores que son mas y mas fáciles, pero manejar la lógica de una petición mediante una función puede ser perjudicial a la hora de manejar muchas vistas. Es por eso que en este post vamos a ver cómo usar class bases views, una forma mas ordenada de encapsular la lógica.
¿Qué son?
Class-Based-Views (CBV en adelante) es una forma alternativa para crear vistas en django, no pretende reemplazar las Function-Based-Views (FBV en adelante) , pero si tienen como objetivo permitir al desarrollador:
- Organización del código relacionado con metodos HTTP específicos (GET, POST, PUT, etc) y que el router pueda acceder a estos sin tener que usar condicionales específicas.
- Técnicas orientadas a objetos (Como los Mixins) para solucionar ciertos problemas.
La pregunta clave es ¿por qué? y ante esto hay varias cosas que la respaldan:
- Orden.
- Estética del Código.
- Reciclaje del Código.
- Uso de herramientas de OOP.
- Simpleza.
- Estructura bien definida (definición de acciones para cada protocolo, definición de respuestas para casos de éxito y falla con métodos como get_success_url).
¿Cómo funcionan?
Para entender mejor ciertos aspectos de cómo funcionan las CBV debemos ver un poco de FBV
# views.py from django.shortcuts import render def index(request): if request.method == 'GET': # TODO: GET ACTIONS return render(request,"template_get.html") elif request.method == 'POST': # TODO: POST ACTIONS return render(request,"template_POST.html") elif request.method == 'PUT': # TODO: PUT ACTIONS return render(request,"template_put.html") elif request.method == 'DELETE': # TODO: DELETE ACTIONS return render(request,"template_del.html") # end views.py # ---------------------- # urls.py from django.conf.urls import patterns urlpatterns = patterns('', (r'^$', "myapp.views.index"), ) # end urls.pyComo vemos en el código anterior en una sola función la lógica de múltiples ti pos de respuestas, y esto no es adecuado porque restara mantenibilidad y escalabilidad a nuestra aplicación, para evitar eso están las CBV, veamos a continuación cómo sería esto:
# views.py from django.views.generic.base import View from django.shortcuts import render class IndexView(View): def get(self, request): # TODO: GET ACTIONS return render(request,"template_get.html") def post(self, request): # TODO: POST ACTIONS return render(request,"template_POST.html") def put(self, request): # TODO: PUT ACTIONS return render(request,"template_put.html") def delete(self, request): # TODO: DELETE ACTIONS return render(request,"template_del.html") # end views.py # ---------------------- # urls.py from django.conf.urls import patterns from myapp.views import IndexView urlpatterns = patterns('', (r'^$', IndexView.as_view()), ) # end urls.py
Como vemos en el código anterior la legibilidad del código mejoraría en caso de que existiesen muchas líneas de código por cada método, además de que ya sería posible usar ciertas técnicas de programación orientada a objetos como los mixins.
Si te gusto el post
compartelo... :D
No hay comentarios:
Publicar un comentario