Las siguientes tres clases proporcionan gran parte de la funcionalidad necesaria para crear vistas de Django. Puede pensar en ellos como padre vistas, que pueden usarse solas o heredadas. Es posible que no proporcionen todas las capacidades necesarias para los proyectos, en cuyo caso hay vistas basadas en clases Mixins y Generic.

Muchas de las vistas basadas en clases integradas de Django heredan de otras vistas basadas en clases o de varios mixins. Debido a que esta cadena de herencia es muy importante, las clases de ancestros se documentan bajo el título de la sección de Ancestros (MRO). MRO es un acrónimo de Method Resolution Order.

View

class django.views.generic.base.View

La vista base basada en la clase magistral. Todas las demás vistas basadas en clases heredan de esta clase base. No es una vista estrictamente genérica y, por lo tanto, también se puede importar desde django.views.

Diagrama de flujo del método

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. options()

Ejemplo views.py:

from django.http import HttpResponse
from django.views import View

classMyView(View):defget(self, request,*args,**kwargs):return HttpResponse('Hello, World!')

Ejemplo de URL.py:

from django.urls import path

from myapp.views import MyView

urlpatterns =[
    path('mine/', MyView.as_view(), name='my-view'),]

Atributos

http_method_names

La lista de nombres de métodos HTTP que aceptará esta vista.

Defecto:

['get','post','put','patch','delete','head','options','trace']

Métodos

classmethod as_view(**initkwargs)

Devuelve una vista invocable que toma una solicitud y devuelve una respuesta:

response = MyView.as_view()(request)

La vista devuelta tiene view_class y view_initkwargs attributes.

Cuando se llama a la vista durante el ciclo de solicitud / respuesta, el setup() método asigna el HttpRequest a la vista request attributey cualquier argumento posicional y / o de palabras clave capturado del patrón de URL al args y kwargs attributes, respectivamente. Luego dispatch() se llama.

setup(request, *args, **kwargs)

Realiza key ver la inicialización antes de dispatch().

Si anula este método, debe llamar super().

dispatch(request, *args, **kwargs)

los view parte de la vista: el método que acepta una request argumento más argumentos, y devuelve una respuesta HTTP.

La implementación predeterminada inspeccionará el método HTTP e intentará delegar en un método que coincida con el método HTTP; a GET será delegado a get(), a POST para post(), etcétera.

Por defecto, un HEAD la solicitud será delegada a get(). Si necesitas manejar HEAD solicitudes de una manera diferente a GET, puede anular el head() método. Ver Compatible con otros métodos HTTP para un ejemplo.

http_method_not_allowed(request, *args, **kwargs)

Si se llamó a la vista con un método HTTP que no admite, se llama a este método en su lugar.

La implementación predeterminada regresa HttpResponseNotAllowed con una lista de métodos permitidos en texto sin formato.

options(request, *args, **kwargs)

Maneja responder a las solicitudes del verbo OPTIONS HTTP. Devuelve una respuesta con el Allow encabezado que contiene una lista de los nombres de métodos HTTP permitidos de la vista.

TemplateView

class django.views.generic.base.TemplateView

Representa una plantilla determinada, con el contexto que contiene los parámetros capturados en la URL.

Ancestros (MRO)

Esta vista hereda métodos y attributes desde las siguientes vistas:

  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.base.ContextMixin
  • django.views.generic.base.View

Diagrama de flujo del método

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_context_data()

Ejemplo views.py:

from django.views.generic.base import TemplateView

from articles.models import Article

classHomePageView(TemplateView):

    template_name ="home.html"defget_context_data(self,**kwargs):
        context =super().get_context_data(**kwargs)
        context['latest_articles']= Article.objects.all()[:5]return context

Ejemplo de URL.py:

from django.urls import path

from myapp.views import HomePageView

urlpatterns =[
    path('', HomePageView.as_view(), name='home'),]

Contexto

  • Poblado (a través de ContextMixin) con los argumentos de palabras clave capturados del patrón de URL que sirvió a la vista.
  • También puede agregar contexto usando el extra_context argumento de palabra clave para as_view().

RedirectView

class django.views.generic.base.RedirectView

Redirige a una URL determinada.

La URL proporcionada puede contener estilo diccionario string formato, que se interpolará con los parámetros capturados en la URL. Porque la interpolación de palabras clave es siempre hecho (incluso si no se pasan argumentos), cualquier "%" Los caracteres de la URL deben escribirse como "%%" para que Python los convierta en un solo signo de porcentaje en la salida.

Si la URL proporcionada es None, Django devolverá un HttpResponseGone (410).

Ancestros (MRO)

Esta vista hereda métodos y attributes desde la siguiente vista:

  • django.views.generic.base.View

Diagrama de flujo del método

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_redirect_url()

Ejemplo views.py:

from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView

from articles.models import Article

classArticleCounterRedirectView(RedirectView):

    permanent =False
    query_string =True
    pattern_name ='article-detail'defget_redirect_url(self,*args,**kwargs):
        article = get_object_or_404(Article, pk=kwargs['pk'])
        article.update_counter()returnsuper().get_redirect_url(*args,**kwargs)

Ejemplo de URL.py:

from django.urls import path
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView, ArticleDetailView

urlpatterns =[
    path('counter//', ArticleCounterRedirectView.as_view(), name='article-counter'),
    path('details//', ArticleDetailView.as_view(), name='article-detail'),
    path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),]

Atributos

url

La URL a la que redirigir, como string. O None para generar un error HTTP 410 (desaparecido).

pattern_name

El nombre del patrón de URL al que se redirecciona. La inversión se realizará utilizando los mismos argumentos y kwargs que se pasaron para esta vista.

permanent

Si la redirección debe ser permanente. La única diferencia aquí es el código de estado HTTP devuelto. Si True, la redirección utilizará el código de estado 301. Si False, la redirección utilizará el código de estado 302. De forma predeterminada, permanent es False.

query_string

Ya sea para pasar la consulta GET string a la nueva ubicación. Si True, luego la consulta string se adjunta a la URL. Si False, luego la consulta string se descarta. Por defecto, query_string es False.

Métodos

get_redirect_url(*args, **kwargs)

Construye la URL de destino para la redirección.

los args y kwargs los argumentos son argumentos posicionales y / o de palabras clave capturado del patrón de URL, respectivamente.

La implementación predeterminada utiliza url como un comienzo string y realiza la expansión de % parámetros nombrados en eso string utilizando los grupos nombrados capturados en la URL.

Si url no está configurado, get_redirect_url() intenta revertir el pattern_name utilizando lo que se capturó en la URL (se utilizan grupos con nombre y sin nombre).

Si lo solicita query_string, también agregará la consulta string a la URL generada. Las subclases pueden implementar cualquier comportamiento que deseen, siempre que el método devuelva una URL lista para redireccionar string.