Primeros pasos con class-based view (vistas basas en clases) en django

Estoy muy acostumbrado a crear mis vistas con funciones eso fue lo que aprendes en cualquier tutorial que encuentras googleando (tambien utilizo mucho duckduckgo) y con funciones fue como escribí mi primer "Hola Mundo¡", pero leyendo las documentación de django 1.5, en esots dias encontré algo que me a gustado mucho y se ve muy practico que son las class-based views, y se ven muy interesante y practivo, además de darme otro punto de vista de como reutilizar código.

Ejemplo de function view, sacados de la pagina https://docs.djangoproject.com
# view.py
from django.http HttpResponse

def my_vista(request):
    if request.method == 'GET':
        return HttpResponse('result')

# urls.py
from django.conf.urls import patterns

urlpatterns = ('',
    url(r'^funcion_view/', 'miapp.views.mi_vista', name="vista_funcion"),
)
Ejemplo de Class-base view
#views.py
from django.http import HttpResponse
from django.views.generic.base import View

class MiVista(View):
    def get(self, request):
        return HttpResponse('result')
#urls.py
from django.conf.urls import patterns
from miapp.views import MiVista

urlpatterns = patterns('',
    url(r'^class_base_view/', MiVista.as_view(), name="vista_class"),
)
Tanto la función como la clase devuelven exactamente lo mismo. en la clase, también puede declarar otros metodos como post, dispatch, un ejemplo mas completo seria con un formulario
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.core.urlresolvers import reverse
from django.views.generic.base import View

from .forms import MyForm

class MiVistaFormulario(View):
    form_class = MiFormulario
    initial = {'llave': 'value'}
    template_name = 'formulario.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            return HttpResponseRedirect(reverse('formulario_guardado'))

        return render(request, self.template_name, {'form': form})

Según la documentación de django, no pretende remplazar la funciones, pero si tiene algunas ventajas frente a las funciones, puede ser mas organizado, organiza el código con métodos para POST, GET, etc, en lugar de condiciones, utilizar la técnica de orientación a objetos, soporte mixes, herencia múltiple y puede ser mas reutilizable.

Fuente: https://docs.djangoproject.com/en/1.5/topics/class-based-views/intro/

Entradas más populares de este blog

Convertir disco virtualbox.ova a qemu.qcow2

Mi cambio de asterisk a FreeSWITCH

Python, Redis una combinacion estupenda.

disqus

comments powered by Disqus