Referencia de API de vistas basadas en clases. Para material introductorio, vea el Vistas basadas en clases guía de temas.

Especificación

Cada solicitud atendida por una vista basada en clases tiene un estado independiente; por lo tanto, es seguro almacenar variables de estado en la instancia (es decir, self.foo = 3 es una operación segura para subprocesos).

Una vista basada en clases se implementa en un patrón de URL usando el as_view() método de clase:

urlpatterns =[
    path('view/', MyView.as_view(size=42)),]

Seguridad de subprocesos con argumentos de vista

Los argumentos que se pasan a una vista se comparten entre todas las instancias de una vista. Esto significa que no debe usar una lista, diccionario o cualquier otro objeto mutable como argumento para una vista. Si lo hace y se modifica el objeto compartido, las acciones de un usuario que visite su vista podrían tener un efecto en los usuarios posteriores que visiten la misma vista.

Los argumentos pasaron a as_view() se asignará a la instancia que se utiliza para atender una solicitud. Usando el ejemplo anterior, esto significa que cada solicitud en MyView es capaz de usar self.size. Los argumentos deben corresponder a attributes que ya existen en la clase (volver True en un hasattr cheque).

Vistas base vs genéricas

Las vistas basadas en clases base se pueden considerar como padre vistas, que pueden usarse solas o heredadas. Es posible que no brinden todas las capacidades requeridas para los proyectos, en cuyo caso hay Mixins que amplían lo que pueden hacer las vistas base.

Las vistas genéricas de Django se construyen a partir de esas vistas base y se desarrollaron como un atajo para patrones de uso comunes, como mostrar los detalles de un objeto. Toman ciertos modismos y patrones comunes que se encuentran en el desarrollo de vistas y los abstraen para que pueda escribir rápidamente vistas comunes de datos sin tener que repetirlo.

La mayoría de las vistas genéricas requieren queryset key, el cual es un QuerySet ejemplo; ver Realización de consultas para obtener más información sobre QuerySet objetos.