A√ļn no tienes acceso a esta clase

Crea una cuenta y contin√ļa viendo este curso

Curso B√°sico de Django

Curso B√°sico de Django

Facundo García Martoni

Facundo García Martoni

Generic Views

27/29
Recursos

Aportes 24

Preguntas 0

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi√≥n.

LoginView

Se usa con: from django.contrib.auth.views import LoginView

Se usa para desplegar el login form y manejar toda la accion de logueo

Les recomiendo Esta página para ver detalladamente las class based views, les muestran jerarquías y herencias para entender como operan las mismas.

![](

Utilicé la view LoginView

Les recomiendo esta pagina para buscar información sobre las Generic views. Explica mucho mejor.

https://docs.djangoproject.com/en/4.0/ref/class-based-views/

Yo escogí DayArchiveView
Así luce mi views. py

from django.views.generic.dates import DayArchiveView

class QuestionDayArchiveView(DayArchiveView):
    queryset = Question.objects.all()
    date_field = 'pub_date'
    allow_empty = True

Mi urls. py

from django.urls import path

from . import views

app_name='polls'
urlpatterns = [
    # 2022/feb/1
    path('<int:year>/<str:month>/<int:day>/', 
    views.QuestionDayArchiveView.as_view(),
    name='question archive day'
    )
]

Mi question_archive_day.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Questions published on {{ day }}</title>
</head>
<body>
    <h1> Questions published on {{ day }}</h1>
    {% if object_list %}
        <ul>
            {% for q in object_list %}
                <li>
                    <p>
                        <strong>{{q.question_text}}</strong> 
                        <i>published at {{ q.pub_date |date:'g:i A'}}</i>
                    </p>
                </li>
            {% endfor %}
        </ul>
    {% else %}
    <p> No questions published on {{day}} </p>
    {% endif %}
    
</body>
</html>

La vista desde el navegador

class PasswordResetCompleteView

from django.contrib.auth.views import PasswordResetCompleteView

con esta generic view podemos ofrecer la funcionalidad de notificar al usuario que la contrase√Īa ha sido reestablecida.

PasswordChangeView es utilizada para cambiar la contrase√Īa, por defecto trae la template registration/password_change_form.html

LoginView corresponde a un sistema de Logeo para los usuarios. De forma tal que dichos usuarios puedan disponer de una vista predise√Īada para que puedan iniciar sesi√≥n sin darle acceso al panel de administraci√≥n de Django. Lo que me parece genial de este tipo de recursos en Django es que dispone de atributos que facilitan ampliamente nuestro trabajo a nivel de seguridad y acceso que vienen nativos en Django.
https://developer.mozilla.org/es/docs/Learn/Server-side/Django/Authentication

CreateView: Vista para crear un nuevo objeto, con una respuesta representada por una plantilla.

class PasswordChangeDoneView
La p√°gina que se muestra despu√©s de que un usuario ha cambiado su contrase√Īa.

  • Clase: DateDetailView
    Vista de un objeto en una fecha; difiere del DetailView est√°ndar aceptando una fecha con formato: year/month/day en la URL.
from django.views.generic import DateDetailView

De las Generic Edit, Create View puede ser la más ocupada para poder hacer creación de un post en un blog o un Tweet o el posteo de una foto en instagram o la vista en la creación de una discución en el foro de platzi o un tutorial

Se importa con este código

from django.views.generic import CreateView

Las vistas basadas en clases utilizan atributos, a diferencia view function que utilizan parametros. Ademas de tener metodos que te ayudan segun tu desarrollo. Aqui traigo un ejemplo de generic view llamado DetailView, que utilice para un proyecto.

class EmpleadoDetailView(DetailView):
    model = Persona
    template_name = "persona/detailview.html"
    def get_context_data(self, **kwargs):
        context = super(EmpleadoDetailView, self).get_context_data(**kwargs)
        context['titulo']='Empleado del mes'
        return context

Como pueden observar utilice la clase y el metodo de esta pagina

Los atributos de la clase detailview que utilice fueron:

  • model: para referencial el modelo el cual se va utilizar

  • template_name : el nombre de mi html donde voy a mostrar dicha vista

Este metodo llamado def get_context_data me sirvio para enviar una variable extra al template, una variable que no se contemple dentro de los atributos del modelo, pero que me es necesario solo para ese proceso. Retornando el valor mencionado anteriormente.

LoginView es una claseView que permite crear una vista con un formulario para niciar sesión.
Cuenta con 15 atributos y 22 métodos

se importa de la siguiente manera

from django.contrib.auth.views import LoginView

UpdateView
Vista para actualizar un objecto, con una respuesta renderizada por un template.
Los atributos m√°s importantes son:

model, success_url, template_name.

Los métodos más importantes son:

get, post, put, as_view

DetailView:

Representar una vista de ‚Äúdetalle‚ÄĚ de un objeto.

La importamos en las view con:

from django.views.generic import DetailView

Con lo aprendido hasta ahora. Podemos sacar provecho de esta Generic View:

Los atributos:
model = modelo_a_mostrar
template_name=template_a_mostrar_el_detalle

Podemos defininir estos atributos y ya no deberíamos indicarlos en el return

Yo elegí el DetailView, para implementarlo se define la vista en el archivo views

class QuestionDetail(DetailView):
    model=Question
    template_name="polls/detail.html"

Y en el urls tendrían que remplazar el path donde se llamaba la función detail por esta linea:
path(‚Äėint:pk/‚Äô,views.QuestionDetail.as_view(), name= ‚Äėdetail‚Äô)
El template queda tal como indicó el maestro en clase

LoginView
Nos muestra el formulario de inicio de sesión (Username, Password y submit).

UpdateView
Vista para actualizar un objeto, con una respuesta renderizada por una plantilla.

Use ListView para el index:

# polls/views-py
from django.views.generic import ListView

class ListQuestion(ListView):
    model = Question
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'
    queryset = Question.objects.all()
# polls/url-py
urlpatterns = [
    path('', views.ListQuestion.as_view(), name='index'),

LogoutView:

Esta vista hace logout al usuario adem√°s de mostrarle el mensaje ‚ÄúYou‚Äôre logged out‚ÄĚ.

Posee varios atributos como:

  • content_type
  • next_page
  • response_class

Así como métodos:

  • get()
  • get_context_data()
  • get_next_page()

ArchiveIndexView
Pagina que muestra los ultimos archivos de una base de datos organizados por fecha. Se usa directamente desde la url . py y el archivo html correspondiente.
A continuación se muestra el uso del mismo con el ejemplo del curso:

En el archivo urls . py se usa así:

from django.urls import path
from django.views.generic.dates import ArchiveIndexView

from polls.models import Question

urlpatterns = [
    path('url_name/',
         ArchiveIndexView.as_view(model=Question, date_field="pub_date"),
         name="article_archive.html"),
]

Y en el .html:

<ul>
    {% for article in Question %}
        <li>{{ article.pub_date }}: {{ article.question_text }}</li>
    {% endfor %}
</ul>

FormView
Se usa importando:

from django.views.generic.edit import FormView

Previamente como comento el profesor. Son para llenar una variedad de opciones que se encuentren en el formulario. Utilizando el método POST. Encontré un ejemplo para entender mejor con código en el siguiente enlace:
https://www.geeksforgeeks.org/formview-class-based-views-django/