Comenzando con Django

Python Django es un marco web que se utiliza para crear aplicaciones web de manera muy eficiente y rápida. Django se denomina marco de trabajo con batería incluida porque contiene muchas funciones integradas, como la interfaz de administración de Django, la base de datos predeterminada: SQLite3, etc. Django proporciona varios componentes listos para usar, como una forma de manejar la autenticación de usuario, un panel de administración su sitio web, formularios, una forma de cargar archivos, etc.

En este artículo, aprenderemos Django mediante la creación de una aplicación web básica de blogs.  

¿Por qué Marco Django?

  • Django es un marco de desarrollo web rápido que se puede utilizar para desarrollar aplicaciones web completas en un corto período de tiempo.
  • Es muy fácil cambiar de base de datos en el marco de Django.
  • Tiene una interfaz de administración incorporada que facilita el trabajo con él.
  • Django es un marco completamente funcional que no requiere nada más.
  • Tiene miles de paquetes adicionales disponibles.
  • Es muy escalable.

Estructura de la aplicación web Django

Django se basa en la arquitectura MVT (Model-View-Template) . MVT es un patrón de diseño de software para desarrollar una aplicación web. 

  • Modelo: El modelo actuará como la interfaz de sus datos. Es responsable de mantener los datos. Es la estructura de datos lógica detrás de toda la aplicación y está representada por una base de datos (generalmente bases de datos relacionales como MySql, Postgres).
  • Ver: La vista es la interfaz de usuario: lo que ve en su navegador cuando muestra un sitio web. Está representado por archivos HTML/CSS/Javascript y Jinja.
  • Plantilla: una plantilla consta de partes estáticas de la salida HTML deseada, así como alguna sintaxis especial que describe cómo se insertará el contenido dinámico.

Django Architecture

Configuración del entorno de desarrollo

Siempre es recomendable utilizar un entorno virtual antes de iniciar cualquier proyecto de Django porque, a veces, cuando trabaja en varios proyectos, puede necesitar diferentes versiones de Django. El entorno virtual crea un entorno separado para diferentes proyectos y puede instalar dependencias de cada proyecto por separado. Para crear un entorno virtual, escriba el siguiente comando en la terminal: 

python3 -m venv <name>

Aquí el nombre es el nombre del entorno virtual. Podemos dar cualquier nombre a nuestro entorno. Vamos a crear el entorno virtual con el nombre solo venv. Entonces, el comando para crear el entorno será: 

python3 -m venv venv

Después de ejecutar el comando anterior, verá una carpeta llamada venv con los siguientes subdirectorios.

python django create virtual environment

Después de crear el entorno virtual vamos a activarlo. Para activarlo, escriba el siguiente comando en la terminal.

source ./venv/bin/activate

Nota: Si tiene su entorno virtual configurado en otra ubicación y su terminal se abrió en otra ubicación, proporcione la ubicación a la carpeta venv, es decir, nuestra carpeta de entorno virtual.

Después de ejecutar el comando anterior, debería ver (venv) al comienzo de cada línea de su terminal, como se muestra en la imagen a continuación.

python django virtual environment activate

Instalando Django

Podemos instalar Django usando el comando pip. Para instalar este tipo, escriba el siguiente comando en la terminal.

pip install django

python django install

Para obtener más información, consulte Introducción e instalación de Django

Comenzando el Proyecto

  • Para iniciar un proyecto de Django en su PC, abra Terminal e ingrese el siguiente comando
django-admin startproject projectName
  • Se creará una nueva carpeta con el nombre projectName. Para ingresar al proyecto usando el comando de terminal enter
cd projectName
  • Ahora abramos el servidor y veamos si todo funciona bien o no. Para ejecutar el servidor, escriba el siguiente comando en la terminal.
python manage.py runserver

Después de ejecutar el servidor, vaya a http://127.0.0.1:8000/ y verá algo como esto:

Django runserver

Estructura del proyecto

Un proyecto de Django, cuando se inicializa, contiene archivos básicos de forma predeterminada, como manage.py, view.py, etc. Una estructura de proyecto simple es suficiente para crear una aplicación de una sola página. Aquí están los archivos principales y sus explicaciones. Dentro de la carpeta geeks_site (carpeta del proyecto) habrá los siguientes archivos: 

Django project structure

Analicemos estos archivos en detalle: 

manage.py: este archivo se usa para interactuar con su proyecto a través de la línea de comando (iniciar el servidor, sincronizar la base de datos, etc.). Para obtener la lista completa de comandos que puede ejecutar manage.py, escriba este código en la ventana de comandos: 

python manage.py help
  • _init_.py: Es un paquete de python. Se invoca cuando se importa el paquete o un módulo del paquete. Por lo general, usamos esto para ejecutar el código de inicialización del paquete, por ejemplo, para la inicialización de datos a nivel de paquete.
  • settings.py: Como su nombre lo indica, contiene todas las configuraciones del sitio web. En este archivo registramos las aplicaciones que creamos, la ubicación de nuestros archivos estáticos, los detalles de configuración de la base de datos, etc.
  • urls.py: En este archivo almacenamos todos los enlaces del proyecto y funciones a llamar.
  • wsgi.py: este archivo se utiliza para implementar el proyecto en WSGI. Se utiliza para ayudar a que su aplicación Django se comunique con el servidor web.

Crear aplicación

Hasta ahora hemos creado el proyecto Django y ahora crearemos una aplicación . Django es famoso por su estructura de aplicación única y totalmente administrada. Para cada funcionalidad, se puede crear una aplicación como un módulo completamente independiente. Para crear una aplicación, debemos ir al directorio que contiene manage.py y ejecutar el siguiente comando: 

python manage.py startapp appname

Ahora vamos a crear una aplicación llamada publicación, por lo que el comando para crear la aplicación sería: 

python manage.py startapp post

Ahora nuestro directorio se ve así:  

Creating app python django

Para considerar el proyecto como nuestro proyecto, debemos especificar el nombre del proyecto en la lista INSTALLED_APPS en settings.py –

Python3

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'post.apps.PostConfig', # our app name
]

Definición de modelos

Ahora, para la aplicación de publicación, necesitamos algunos modelos. Un modelo de Django es la característica incorporada que utiliza Django para crear tablas, sus campos y varias restricciones. En resumen, Django Models es el SQL de la base de datos que se usa con Django. SQL (lenguaje de consulta estructurado) es complejo e implica muchas consultas diferentes para crear, eliminar, actualizar o cualquier otra cosa relacionada con la base de datos. Los modelos de Django simplifican las tareas y organizan las tablas en modelos. Generalmente, cada modelo se asigna a una sola tabla de base de datos.

Sintaxis:

from django.db import models       
class ModelName(models.Model):
       field_name = models.Field(**options)

Ejemplo:

Python3

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
 
class Post(models.Model):
 
    title = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    created_on = models.DateTimeField(default=timezone.now)
    last_modified = models.DateTimeField(auto_now=True)
 
    def __str__(self) -> str:
        return self.title

En el modelo anterior, cada campo representa una columna en la base de datos SQLite. También hemos creado una clave externa para el modelo de usuario. El modelo de usuario viene integrado con Django

Nota: El comando on_delete=models.CASCADE eliminará todas las publicaciones de un autor si se elimina el perfil de ese autor. 

Cada vez que creamos un modelo, eliminamos un modelo o actualizamos algo en cualquiera de los modelos.py de nuestro proyecto. Necesitamos ejecutar dos comandos makemigrations y migrate . makemigrations básicamente genera los comandos SQL para las aplicaciones preinstaladas (que se pueden ver en las aplicaciones instaladas en settings.py) y el modelo de su aplicación recién creada que agrega en las aplicaciones instaladas, mientras que la migración ejecuta esos comandos SQL en el archivo de la base de datos.

Así que cuando corremos,

python manage.py makemigrations

Consulta SQL para crear el modelo anterior a medida que se crea una tabla. Podemos ver esto en la carpeta de migraciones como 0001_initial.py.

python makemigrations

Para crear la tabla en el tipo de base de datos

python manage.py migrate

Ahora que hemos creado un modelo, podemos realizar varias operaciones, como crear una Fila para la tabla o, en términos de Django, Crear una instancia de Modelo. Para saber más, visite – Modelo de aplicación básica de Django – Makemigrations and Migrate .

Renderizar modelo en Django Admin

Después de crear el modelo, necesitamos agregar datos a nuestro modelo. Podemos añadir datos de dos formas. Estos son – 

  • Concha de Django
  • Administrador de Django

En este artículo, nos centraremos en representar los datos del modelo a través de la interfaz de administración. Si desea obtener información sobre la representación de datos a través de Django Shell, consulte Django ORM: inserción, actualización y eliminación de datos .

Necesitamos crear un superusuario para nuestra aplicación web que accederá al panel de administración. Para crear un superusuario, escriba el siguiente comando en la terminal: 

python manage.py createsuperuser

django admin createsuperuser

Ahora vaya a http://127.0.0.1:8000/admin en el navegador para acceder al panel de la interfaz de administración. 

django admin interface login

Proporcione el nombre de usuario y la contraseña creados para el superusuario y luego se abrirá el panel de administración.

django admin interface

Para representar nuestro modelo en nuestro panel de administración, debemos realizar cambios en el archivo post/admin.py. Ingrese el siguiente código en el archivo admin.py –

Python3

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

Actualizar su panel de administración le permitirá ver el modelo que creamos.

django admin dashboard

Nota: Para obtener más información, consulte Modelo de representación en la interfaz de administración de Django .

Agreguemos algunos datos a nuestra base de datos. Al hacer clic en el modelo Geeks, veremos algo como esto: 

Django admin interface model

Podemos hacer clic en el botón Agregar publicación en la esquina superior derecha y luego podremos ver los campos para agregar datos. Vea la imagen de abajo – 

Django add data using admin

Después de agregar los datos requeridos, veremos algo como esto en nuestro panel de administración: 

django admin models dashboard

Vistas de Django

Después de crear y agregar datos a nuestros modelos, debemos mostrar los datos en nuestro sitio. La representación de datos es un proceso de dos pasos. Primero necesitamos crear nuestra función de vista y luego necesitamos pasar los datos a nuestra plantilla. Aquí nos centraremos en la función de visualización.

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.

django-views

Al principio, vamos a crear una función de vista de muestra que simplemente muestre contenido HTML normal.

Python3

from django.http import HttpResponse
 
# create a function
def home(request):
     
    return HttpResponse("<h1>Welcome to GeeksforGeeks</h1>")

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 home. 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.

La función anterior mostrará el texto Bienvenido a GeeksforGeeks como h1 en la página. Ahora, la pregunta que puede surgir es en qué URL se llamará a esta función y cómo manejaremos dichas URL. No se preocupe, manejaremos la URL en la sección, pero en esta sección continuemos solo con las vistas de 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. El que creamos arriba es una función basada en vistas basadas en clases

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 (herencias múltiples), se pueden usar para factorizar el código en componentes reutilizables. vista.

Patrones de URL de Django

En Django, cada vista debe asignarse a un patrón de URL correspondiente . Esto se hace a través de un módulo de Python llamado URLConf (configuración de URL). Cada módulo de URLConf debe contener una variable urlpatterns , que es un conjunto de patrones de URL que se compararán con la URL solicitada. Estos patrones se verificarán en secuencia hasta que se encuentre la primera coincidencia. Luego se invoca la vista correspondiente a la primera coincidencia. Si no coincide ningún patrón de URL, Django invoca una vista de manejo de errores apropiada.

Ahora, si vemos nuestro proyecto, hemos creado una aplicación llamada gfg_site, el módulo de Python que se usará como URLConf es el valor de ROOT_URLCONF en gfg_site/settings.py. De forma predeterminada, se establece en ‘gfg_site.urls’. Cada módulo de URLConf debe contener una variable urlpatterns, que es un conjunto de patrones de URL que se compararán con la URL solicitada. Estos patrones se verificarán en secuencia hasta que se encuentre la primera coincidencia. Luego se invoca la vista correspondiente a la primera coincidencia. Si no coincide ningún patrón de URL, Django invoca una vista de manejo de errores adecuada.

Aquí hay un código de muestra para post/urls.py:

Python3

from django.urls import path
from . import views
 
urlpatterns = [
    path('', views.home, name='home'),
]

Incluyendo otros módulos URLConf

Es una buena práctica tener un módulo URLConf para cada aplicación en Django. Este módulo debe incluirse en el módulo URLConf raíz de la siguiente manera:

Python3

from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('post.urls'))
]

Ahora, si se dirige hacia http://127.0.0.1:8000/, nuestro sitio será: 

python django urls

En el ejemplo anterior, la declaración de inclusión buscará en la lista de patrones de URL en gfg_site_app/urls.py y luego buscará en todas las rutas definidas en el archivo url.py y llamará a la función de vistas respectiva.

Plantillas Django

Las plantillas son la tercera y más importante parte de la estructura MVT de Django. Una plantilla en Django está básicamente escrita en HTML, CSS y Javascript en un archivo .html. Django framework maneja y genera dinámicamente páginas web HTML que son visibles para el usuario final. Django funciona principalmente con un backend, por lo que, para proporcionar un frontend y proporcionar un diseño a nuestro sitio web, usamos plantillas. Existen dos métodos para añadir la plantilla a nuestro sitio web en función de nuestras necesidades.

  • Podemos usar un único directorio de plantillas que se distribuirá por todo el proyecto.
  • Para cada aplicación de nuestro proyecto, podemos crear un directorio de plantillas diferente.

Para nuestro proyecto actual, crearemos un único directorio de plantilla que se distribuirá por todo el proyecto para simplificar. Las plantillas a nivel de aplicación generalmente se usan en grandes proyectos o en caso de que queramos proporcionar un diseño diferente a cada componente de nuestra página web.

Ahora vamos a crear el directorio de plantillas y agregar ese directorio a nuestro archivo settings.py.

add templates to our directory

Agregando esta carpeta de plantillas a nuestro archivo settings.py – 

Python3

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
       
        # adding template folder that we just created
        'DIRS': [BASE_DIR/'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Después de agregar la ubicación del directorio de plantillas, crearemos un archivo HTML simple y lo nombraremos home.html y luego representaremos este archivo desde nuestra función de vista.

archivo HTML:

HTML

<h1>Welcome to GeeksforGeeks</h1>

Para representar este HTML en nuestro sitio, necesitamos usar la función de representación de django.shortcuts. A continuación se muestra la función de vista actualizada.

vistas.py

Python3

from django.http import HttpResponse
from django.shortcuts import render
 
def home(request):
 
    context = {}
    return render(request, 'home.html', context)

Si nos dirigimos a nuestro sitio web, veremos los datos HTML en nuestro sitio como:

render HTML using Django

Después de conocer las vistas, las URL y las plantillas, veamos cómo mostrar los datos de nuestra base de datos en nuestra página de inicio.

Primero, necesitamos actualizar nuestro archivo views.py para obtener los datos de nuestra base de datos. Aquí, usaremos vistas basadas en clases para nuestro proyecto.

vistas.py

Python3

from .models import Post
from django.views.generic import ListView
 
class HomeView(ListView):
    model = Post
    template_name = 'home.html'

El código anterior es similar a –

Python3

def home(request):
    posts = Post.objects.all()
    context = {
        'Posts': posts
    }
 
    return render(request, 'home.html', context)

Ahora, para las vistas basadas en clases, también debemos realizar cambios en el archivo urls.py. Vea el siguiente código – 

Python3

from django.urls import path
# from . import views
from .views import HomeView
 
urlpatterns = [
    path('', HomeView.as_view(), name='home'),
]

Aquí, la función as_view() se usa para hacer que la clase HomeView sea una función de vista. Ahora finalmente necesitamos hacer cambios en el archivo home.html.

HTML

{% for post in object_list %}
    <h1>{{post.title}}</h1>
    <small>By: {{post.author.first_name}} {{post.author.last_name}}</small>
     
 
<p>{{post.body}}</p>
 
 
{% endfor %}

En el archivo HTML anterior object_list es la variable de contexto que contiene la lista de todos los objetos del modelo que se especifica en la clase HomeView. Ahora, cuando nos dirigimos a http://127.0.0.1:8000/, veremos algo como esto: 

Nota: asegúrese de agregar el nombre y el apellido del superusuario desde el panel de administración.

Blogging app home page django

Agreguemos más publicaciones desde el panel de administración y veamos si se procesan en nuestro sitio o no. 

django blogging app home page

Proyecto de estilismo

Podemos ver que, sin realizar ningún cambio en el sitio, todas nuestras publicaciones de nuestra base de datos se muestran en nuestra página de inicio. Pero todas estas publicaciones no se ven bien. Entonces, veamos cómo agregar algo de estilo a nuestra aplicación web. Podemos diseñar nuestra aplicación web usando un programa de arranque

Nota: No entraremos en los detalles de bootstrap, puede obtener más información sobre bootstrap en nuestro tutorial de Bootstrap .

Para nuestro proyecto, podemos dirigirnos a la documentación de bootstrap y podemos usar la plantilla de inicio. Crearemos otro archivo HTML en nuestra carpeta de plantillas como base.html y luego heredaremos ese archivo HTML en nuestro home.html principal. Veamos cómo hacer esto – 

base.html

HTML

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
 
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
 
    <title>Hello, world!</title>
  </head>
  <body>
    <div class="container">
        {% block body %}
 
        {% endblock %}
    </div>
    <!-- Optional JavaScript; choose one of the two! -->
 
    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
 
    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
    -->
  </body>
</html>

Ahora necesitamos heredar este HTMl base en nuestro archivo home.html. La etiqueta extends se usa para la herencia de plantillas en django. Uno necesita repetir el mismo código una y otra vez. Al usar extensiones, podemos heredar plantillas y variables.

Sintaxis:

{% extends 'template_name.html' %} 

Nota: las extensiones siempre se usan con etiquetas de bloque para que se puedan heredar y anular. {% block body %} en el caso del archivo HTML anterior.

Ahora nuestro home.html se ve así: 

HTML

{% extends 'base.html' %}
 
{% block body %}
    {% for post in object_list %}
        <h1>{{post.title}}</h1>
        <small>By: {{post.author.first_name}} {{post.author.last_name}}</small>
         
 
<p>{{post.body}}</p>
 
 
    {% endfor %}
{% endblock %}

Nuestra aplicación web ahora se ve así: 

styling django web application

Formularios Django

Proyectos Django

Para obtener más información sobre Django Basics, así como Django Advance, consulte nuestro tutorial detallado de Django .

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *