vistas en Django | Python

Django Views es uno de los participantes vitales de M V T Structure de Django . Según la documentación de Django, una función de vista es una función de Python que toma una solicitud web y devuelve una respuesta web . Esta respuesta puede ser el contenido HTML de una página web, una redirección, un error 404, un documento XML, una imagen, cualquier cosa que pueda mostrar un navegador web. 

Las vistas de Django son parte de la interfaz de usuario; por lo general, representan el HTML/CSS/Javascript en sus archivos de plantilla en lo que ve en su navegador cuando representa una página web. (Tenga en cuenta que si ha utilizado otros marcos basados ​​en MVC (Model-View-Controller) , no se confunda entre las vistas de Django y las vistas en el paradigma MVC. Las vistas de Django corresponden aproximadamente a los controladores en MVC y las plantillas de Django a las vistas en MVC.)

django-views

Ejemplo de vista de Django

Ilustración de cómo crear y usar una vista de Django usando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks. 

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django.
 

Una vez que tenga un proyecto listo, podemos crear una vista en geeks/views.py,

Python3

# import Http Response from django
from django.http import HttpResponse
# get datetime
import datetime
 
# create a function
def geeks_view(request):
    # fetch date and time
    now = datetime.datetime.now()
    # convert to string
    html = "Time is {}".format(now)
    # return response
    return HttpResponse(html)

Repasemos este código una línea a la vez: 

  • Primero, importamos la clase HttpResponse del módulo django.http, junto con la biblioteca de fecha y hora de Python.
  • A continuación, definimos una función llamada geeks_view. Esta es la función de visualización. Cada función de vista toma un objeto HttpRequest como su primer parámetro, que normalmente se denomina solicitud.
  • La vista devuelve un objeto HttpResponse que contiene la respuesta generada. Cada función de vista es responsable de devolver un objeto HttpResponse .

Para obtener más información sobre HttpRequest y HttpResponse, visite – Ciclo de solicitud y respuesta de Django – Objetos HttpRequest y HttpResponse
Hagamos que esta vista funcione, en geeks/urls.py,

Python3

from django.urls import path
 
# importing views from views..py
from .views import geeks_view
 
urlpatterns = [
    path('', geeks_view),
]

Ahora, visite http://127.0.0.1:8000/ ,

django-view-example

Para ver cómo hacer un proyecto básico usando la estructura MVT (Modelo, Vista, Plantilla) de Django, visite Creando un Proyecto Django .

Tipos de vistas

Las vistas de Django se dividen en dos categorías principales: –

  • Vistas basadas en funciones
  • Vistas basadas en clases

django-views-types

Vistas basadas en funciones

Las vistas basadas en funciones se escriben usando una función en python que recibe como argumento el objeto HttpRequest y devuelve un objeto HttpResponse. Las vistas basadas en funciones generalmente se dividen en 4 estrategias básicas, es decir, CRUD (Crear, Recuperar, Actualizar, Eliminar). CRUD es la base de cualquier marco que se esté utilizando para el desarrollo. 
 

Vista basada en funciones Ejemplo –

Vamos a crear una vista de lista de vista basada en funciones para mostrar instancias de un modelo. Creemos un modelo del cual crearemos instancias a través de nuestra vista. En geeks/models.py,

Python3

# import the standard Django Model
# from built-in library
from django.db import models
  
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
 
    # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
 
    # renames the instances of the model
    # with their title name
    def __str__(self):
        return self.title

Después de crear este modelo, necesitamos ejecutar dos comandos para crear la base de datos para el mismo.

Python manage.py makemigrations
Python manage.py migrate

Ahora vamos a crear algunas instancias de este modelo usando shell, ejecute form bash,

Python manage.py shell

Ingrese los siguientes comandos

>>> from geeks.models import GeeksModel
>>> GeeksModel.objects.create(
                       title="title1",
                       description="description1").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()

Ahora, si desea ver su modelo y sus datos en el panel de administración, debe registrar su modelo.
Registremos este modelo. En geeks/admin.py,

Python3

from django.contrib import admin
from .models import GeeksModel
# Register your models here.
admin.site.register(GeeksModel)

Ahora tenemos todo listo para el back-end. Verifique que las instancias se hayan creado desde http://localhost:8000/admin/geeks/geeksmodel/ 

django-listview-check-models-instances

Vamos a crear una vista y una plantilla para el mismo. En geeks/views.py,

Python3

from django.shortcuts import render
 
# relative import of forms
from .models import GeeksModel
 
 
def list_view(request):
    # dictionary for initial data with
    # field names as keys
    context ={}
 
    # add the dictionary during initialization
    context["dataset"] = GeeksModel.objects.all()
         
    return render(request, "list_view.html", context)

Cree una plantilla en templates/list_view.html,

html

<div class="main">
 
    {% for data in dataset %}.
 
    {{ data.title }}<br/>
    {{ data.description }}<br/>
    <hr/>
 
    {% endfor %}
 
</div>

Veamos qué hay en http://localhost:8000/

django-listview-function-based

De manera similar, las vistas basadas en funciones se pueden implementar con lógicas para crear, actualizar, recuperar y eliminar vistas.
Django CRUD (Crear, Recuperar, Actualizar, Eliminar) Vistas basadas en funciones: –
 

Vistas basadas en clases

Las vistas basadas en clases proporcionan una forma alternativa de implementar vistas como objetos de Python en lugar de funciones. No reemplazan las vistas basadas en funciones, pero tienen ciertas diferencias y ventajas en comparación con las vistas basadas en funciones: 

  • La organización del código relacionado con métodos HTTP específicos (GET, POST, etc.) se puede abordar mediante métodos separados en lugar de bifurcaciones condicionales.
  • Las técnicas orientadas a objetos, como mixins (herencia múltiple), se pueden usar para factorizar el código en componentes reutilizables.

Las vistas basadas en clases son más simples y eficientes de administrar que las vistas basadas en funciones. Una vista basada en funciones con toneladas de líneas de código se puede convertir en vistas basadas en clases con solo unas pocas líneas. Aquí es donde entra en juego la Programación Orientada a Objetos.  

Vista basada en clases Ejemplo:

En geeks/views.py,

Python3

from django.views.generic.list import ListView
from .models import GeeksModel
 
class GeeksList(ListView):
 
    # specify the model for list view
    model = GeeksModel

Ahora cree una ruta URL para mapear la vista. En geeks/urls.py,

Python3

from django.urls import path
 
# importing views from views..py
from .views import GeeksList
urlpatterns = [
    path('', GeeksList.as_view()),
]

Cree una plantilla en templates/geeks/geeksmodel_list.html,

html

<ul>
    <!-- Iterate over object_list -->
    {% for object in object_list %}
    <!-- Display Objects -->
    <li>{{ object.title }}</li>
    <li>{{ object.description }}</li>
 
    <hr/>
    <!-- If objet_list is empty  -->
    {% empty %}
    <li>No objects yet.</li>
    {% endfor %}
</ul>

Veamos qué hay en http://localhost:8000/
 

django-listview-class-based-views

Django CRUD (Crear, Recuperar, Actualizar, Eliminar) Vistas genéricas basadas en clases: –

Publicación traducida automáticamente

Artículo escrito por ankush_953 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *