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/
No hay comentarios.:
Publicar un comentario