DEV Community

loading...
Cover image for Aprendiendo Django #1

Aprendiendo Django #1

Leonel G.
Developer | Argentina
・6 min read

Antes de ver el codigo (se que estas aca por eso), empecemos por entender algunas cosas.

Que es Django?

Django es EL (si, en mayusculas) framework para desarrollo web.
Esta escrito en Python, es de codigo abierto y utiliza la arquitectura MVT (Model-View-Template).

Esta licenciado bajo BSD, y su nombre proviene (aparentemente) de un guitarrista llamado Django Reinhardt.

No tengo ni idea que tiene que ver una cosa con la otra, pero esa es la historia.

La meta de Django (como la de otros frameworks), es la de facilitar la creacion de aplicaciones web complejas.
Es importante saber que la filosofia detras de Django es la de el re-uso, la conectividad, la extensibilidad, el desarrollo rapido y el principio de DRY (Don't Repeat Yourself).

Creemos un proyecto

La teoria y la historia pueden sonar lindas, pero la practica es la que define si lo usariamos o no.

Primero que nada, vamos a hacer lo de siempre: creemos un entorno virtual:

pip install virtualenv
Enter fullscreen mode Exit fullscreen mode
virtualenv .venv
Enter fullscreen mode Exit fullscreen mode

Si estas en linux

source ./venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

Si estas en Windows y usas cmd

.\.venv\Scripts\activate.bat
Enter fullscreen mode Exit fullscreen mode

Si estas en Windows y usas Powershell

.\.venv\Scripts\activate.ps1
Enter fullscreen mode Exit fullscreen mode

Tene en cuenta que si tenes python 2.7 instalado, vas a tener que reemplazar todo lo que yo escriba como "pip" por "pip3" y "python" por "python3" ya que muchas distribuciones aun estan usando esa version vieja y deprecada del lenguaje, y le colocan ese alias al binario.

Por ultimo, instalamos Django

pip install django
Enter fullscreen mode Exit fullscreen mode

Ya con el entorno preparado y el paquete instalado, metamos las manos en la masa.

Iniciar un proyecto en Django es muy sencillo.
Alguna vez hiciste algo con React? Si la respuesta es si, te acordaras del famoso npx create-react-app SOME_APP_NAME.
Con Django la cosa va por ahi:

django-admin startproject nomina_empleados
Enter fullscreen mode Exit fullscreen mode

Esto generara un directorio nuevo con el nombre indicado que deberia verse mas o menos asi:

.
└── nomina_empleados
    ├── manage.py
    └── nomina_empleados
        ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
Enter fullscreen mode Exit fullscreen mode

La primera pregunta que nos viene a la cabeza es "Por que hay dos directorios con el mismo nombre?"
El primer directorio funciona como un contenedor para nuestro proyecto. Podes cambiarle el nombre a "src", "contenedor", o lo que quieras.
Al que no podes cambiarle el nombre es a la carpeta que esta al mismo nivel que el manage.py. Porque ya esta identificada como la app principal y el solo hecho de cambiarle el nombre, haria que el proyecto no funcione mas.

Hagamos un repaso rapido de que estamos viendo:

  • manage.py : contiene las utilidades de Django (ejecuta python manage.py help para mas detalles). Desde este, podemos ejecutar el proyecto, aplicar migraciones a la base de datos, ejecutar test, etc. Su nombre ya te esta diciendo algo...
  • __init__.py: Es un archivo vacio, usado para que python identifique al directorio como un paquete.
  • wsgi.py : Como lo indican sus siglas ("Web Server Gateway Interface") se trata de una interfaz que permite separar el codigo de la aplicacion de el codigo del servidor.
  • asgi.py: Se trata de una interfaz asincrona ("Asynchronous Server Gateway Interface") similar a WSGI.
  • settings.py: Es el archivo que contiene todo el codigo de configuracion de nuestro proyecto.
  • urls.py: contiene todas las URLs disponibles en el proyecto.

Django Admin

Entre las tantas bondades de Django, nos encontramos con el panel de administracion.
Un panel desde el que podremos hacer operaciones CRUD a nuestras apps, entre otras cosas.

Primero que nada, debemos de hacer el primer migrate de nuestro proyecto para que se creen, en la Base de Datos, las tablas correspondientes.

Cual Base de Datos? Bueno, casi se me olvida mencionarlo.
Django trae su propio ORM para trabajar con una BD, y por defecto usa SQLite3.
Esto podes verlo en el apartado "DATABASE" del settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
Enter fullscreen mode Exit fullscreen mode

Por supuesto que podes usar el motor de bases de datos que vos quieras, pero eso te lo voy a mostrar en otro post.

Volviendo a lo nuestro, debemos ejecutar lo siguiente:

python manage.py makemigrations && python manage.py migrate
Enter fullscreen mode Exit fullscreen mode

Y por consola, vamos a ver:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
Enter fullscreen mode Exit fullscreen mode

Perfecto! Todo salio bien y ahora, al mismo nivel del manage.py, tenemos un archivo db.sqlite3 que es, ni mas ni menos, que nuestra Base de Datos.

Lo que quiero mostrarte, es el panel de administracion.

python manage.py runserver
Enter fullscreen mode Exit fullscreen mode

Eso va a ejecutar nuetro proyecto y, al dirigirnos a http://127.0.0.1:8000/ debemos de ver esto:

Pagina de incio del proyecto

Si nos dirigimos a la ruta del admin: http://127.0.0.1:8000/admin/

Nos mostraria esto:

Inicio de sesion de django-admin

Cual es el usuario y la contraseña? No tenemos eso dado que Django no crea usuarios por defecto.
Para crearlos, paramos la ejecucion con Ctrl+C y ejecutamos:

python manage.py createsuperuser
Enter fullscreen mode Exit fullscreen mode

Debemos de aportar todos los datos que nos solicita.
Al finalizar, relanzamos nuestro proyecto e iniciamos sesion con los datos cargados.

Django Admin

Aumentamos la apuesta: creamos una aplicacion

Lo que vimos hasta ahora fue: deplegar un proyecto (startproject), entender que viene con el, aplicar migraciones y crear un super usuario.
Django nos permite modularizar el sistema en "aplicaciones".
Vamos a crear una:

python manage.py startapp empleados
Enter fullscreen mode Exit fullscreen mode

Si vemos el arbol de directorios, veriamos algo asi:

.
└── nomina_empleados
    ├── empleados
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    ├── manage.py
    ├── db.sqlite3
    └── nomina_empleados
        ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
Enter fullscreen mode Exit fullscreen mode

Se ha generado un directorio nuevo, con varios archivos python.

  • admin.py: Permite configurar algunas cosas de nuestra aplicacion al momento de mostrarse en el panel de administracion
  • apps.py: definicion y configuracion de la app
  • migrations/ : en este directorio estaran todos los archivos generados al momento de hacer una migracion a la base de datos (ya veremos esto mas adelante)
  • models.py: en este archivo, se define el modelo de datos de nuestra aplicacion
  • tests.py: aca definimos los tests para nuestra aplicacion
  • views.py: finalmente, en este archivo definimos las vistas, que son funciones que reciben una peticion desde una URL y devuelven una respuesta.

Para ir cerrando un poco, dentro del archivo models.py de "empleados" colocamos esto:

from django.db import models


class Empleado(models.Model):

    numero_legajo = models.IntegerField("Numero de Legajo", primary_key=True, blank=False, null=False)
    nombre = models.CharField("Nombre", max_length=60, blank=False, null=False)
    apellido = models.CharField("Apellido", max_length=60, blank=False, null=False)
    salario = models.FloatField("Salario", blank=False, null=False, default=500)


    class Meta:
        verbose_name = 'Empleado'
        verbose_name_plural = 'Empleados'

    def __str__(self):
        return f"{self.apellido.upper()}, {self.nombre}"
Enter fullscreen mode Exit fullscreen mode

En el archivo admin.py de empleados debemos de registrar el modelo:

from django.contrib import admin
from .models import Empleado

admin.site.register(Empleado)
Enter fullscreen mode Exit fullscreen mode

Y por ultimo, debemos registrar toda la app dentro del settings.py. Para esto, nos vamos hasta la lista con el nombre de INSTALLED_APPS y al final agregamos lo siguiente.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'empleados'
]
Enter fullscreen mode Exit fullscreen mode

Nuevamente vamos a hacer las migraciones:

python manage.py makemigrations
Enter fullscreen mode Exit fullscreen mode

Con esto vamos a ver el siguiente mensaje:

Migrations for 'empleados':
  empleados/migrations/0001_initial.py
    - Create model Empleado
Enter fullscreen mode Exit fullscreen mode

Django detecto nuestra aplicacion, verifico que no hay una tabla en la base de datos para esta misma y procedio a crear el modelo. Pero eso no se va a aplicar hasta que hagamos un migrate.

python manage.py migrate
Enter fullscreen mode Exit fullscreen mode

Y este es el mensaje de confirmacion:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, empleados, sessions
Running migrations:
  Applying empleados.0001_initial... OK
Enter fullscreen mode Exit fullscreen mode

Vamos nuevamente al admin.py y...

Django admin

Ya vemos nuestra aplicacion.
Ahora, vamos a probar agregar un empleado:

  1. Click en "Empleados"
  2. Click en el boton "Add Empleado"
  3. Rellenar el formulario
  4. Click en "Save"

Empleado agregado

Si damos click en el nombre del empleado creado (TESTING Test en mi caso), accedemos al formulario donde podemos editar alguno de sus campos y hasta podemos borrarlo.

Actualizar o borrar empleado


Eso es todo por ahora. Espero que hayas aprendido bastante.
Quedate antento/a que esta semana, voy a estar subiendo mas!

Si el contenido te gusto, no te olvides de reaccionar, dejar un comentario o simplemente compartir. Ayudame a que el conocimiento llegue aun mas lejos!

Discussion (1)

Collapse
c05m4r profile image
c05m4r

Muy bueno la verdad, un lujo!!!

Forem Open with the Forem app