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