Como todos sabemos, Django utiliza MVT (modelo-vista-plantilla) para su diseño en el desarrollo de aplicaciones web.
La vista en sí es un elemento invocable que acepta una solicitud y devuelve una respuesta. Es más que una simple función, ya que Django proporciona algo llamado Vista basada en clases, por lo que el desarrollador puede escribir una vista usando, bueno, un enfoque basado en clases o puede decir un enfoque OOP. Esta vista basada en clases está diseñada para que podamos estructurar nuestras vistas y poder reutilizarla mediante el poder de la herencia y los mixins.
Como se documenta bien en los documentos de Django, uno de los problemas con la vista basada en funciones es que no hay forma de extenderlas o personalizarlas más allá de algunas opciones de configuración, lo que limita su utilidad en muchas aplicaciones del mundo real.
El conjunto de herramientas de clases base y mixins en Django está diseñado para ofrecer la máxima flexibilidad. Echemos un vistazo a cómo podemos usar la vista basada en clases más básica en Django usando la herencia de clases de vista y compárela con la vista basada en funciones.
#views.py using View class inheritance from django.views import View from django.http import HttpResponse, HttpRequest class IndexView(View): def get(self, request: HttpRequest): # imagine 10 line of view logic here return HttpResponse("Hello world from indexview") def post(self, request: HttpRequest): # imagine 10 line of view logic here return HttpResponse("Hello world from indexview in post method")
#views.py function based view from django.http import HttpResponse, HttpRequest def index(request: HttpRequest): if request.method == "GET": # imagine 10 line of view logic here return HttpResponse("Hello world from index funcion view") elif request.method == "POST": # imagine 10 line of view logic here return HttpResponse("Hello world from index funcion view in post method")
Si observa lo anterior, una vista basada en clases le permite responder a diferentes métodos de solicitud HTTP con diferentes métodos de instancia de clase, en lugar de bifurcar código condicionalmente dentro de una función de vista única. Ahora imagine que en cada vista anterior agregamos 10 líneas de lógica en cada método, debería poder saber cuál es más fácil de recorrer.
Para registrar la vista basada en clases en la configuración de la URL, debemos llamar al método de clase as_view() que básicamente convertirá la vista de clases en una función invocable. esta función convertida llamará a setup() para inicializar su atributo y luego llamará a despacho() para verificar qué método tiene el usuario (un GET, POST u otro método) y conectará el método de solicitud al método de coincidencia correspondiente que originalmente tenía la vista basada en clases.
#urls.py from django.urls import path from myapp.views import IndexView, index urlpatterns = [ path("", IndexView.as_view(), name=IndexView.__name__), path("index/", index, name=index.__name__), ]
la vista basada en clases también admite todos los accesos directos http que tiene Django, como la función render() para representar una plantilla, aquí hay un ejemplo modificado de django cbv usando un acceso directo de renderizado y cooperado con el marco de mensajes de django
class IndexView(View): def get(self, request: HttpRequest): # imagine 10 line of view logic here return render(request, "GEtindex.html") def post(self, request: HttpRequest): # imagine 10 line of view logic here messages.add_message(request, messages.INFO, "POST Success") #add display success message here by django messages framework return render(request, "POSTindex.html")
La vista general basada en clases de Django permite al desarrollador escribir mejor para comprender la lógica de la vista. Cuanto más compleja sea la lógica de la vista, estoy bastante seguro de que será más difícil de leer si solo usamos la vista basada en funciones (demasiadas declaraciones if para verificar qué El método lo usa el usuario, por ejemplo) y es difícil de escalar, mientras que Django CBV está diseñado para dividir nuestra lógica de vista en múltiples métodos, como el método get y post. y puede usarse nuevamente en herencia si lo desea, aunque puedo argumentar que cuanto más herencia tengamos en una clase, será más difícil de leer debido a su abstracción.
puedes consultar más sobre la vista basada en clases en Django docs desde aquí, aquí, aquí
También un buen documento alternativo que se centra en la vista basada en clases de Django es ccbv.co.uk
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3