Fullstack con Python
> Backend con Python
> Sesión 08
> Postwork
- Crear las tablas de tu modelo relacional con el modelo de datos de Django
- Crear las relaciones entre trablas según corresponda con el modelo de datos de Django.
- Usar las consultas junto a las plantillas de Django para mostrar datos de forma dinámica.
- Agregar una página con formulario y procesar la información.
- Constar con la carpeta del repo actualizada.
- Usar la carpeta de trabajo
Clase-09/Postwork/Proyecto/
. - Activar el entorno virtual para tú proyecto.
- Página de inicio maquetada del tú proyecto en la carpeta
Clase-09/Postwork/public_html/
.
-
Usando el modelo entidad-relación, crear el modelo correspondiente a cada tabla.
Creando el modelo para la tabla Tabla1 agregando lo siguiente al archivo
Proyecto/miapp/models.py
:from django.db import models # Create your models here. class Tabla1(models.Model): """ Define la tabla Tabla1 """ campo1 = models.??? campo2 = models.??? campoN = models.???
Antes de continuar, tenemos que indicar a Django algunas configuraciones locales en el archivo
settings.py
:# Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ LANGUAGE_CODE = 'es-MX' TIME_ZONE = 'America/Mexico_City'
La lista tanto de códigos de lenguaje como de zonas horarias se puede consultar en:
- http://www.i18nguy.com/unicode/language-identifiers.html
- https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Avisando a Django que hemos modificado el archivo
models.py
:(Proyecto) Postwork/Proyecto $ python manage.py makemigrations (Proyecto) Postwork/Proyecto $ python manage.py migrate (Proyecto) Postwork/Proyecto $
Django ya cuenta con un sistema CRUD para nuestros modelos y para activarlo es necesario agregar un Tabla1 administrador cuando menos:
(Proyecto) Postwork/Proyecto $ python manage.py createsuperuser Nombre de Tabla1 (leave blank to use 'rctorr'): Proyecto Dirección de correo electrónico: proyecto@gmail.com Password: Password (again): La contraseña es muy similar a nombre de Usuario. Bypass password validation and create user anyway? [y/N]: y Superuser created successfully. (Proyecto) Postwork/Proyecto $
Abrir la url http://localhost:8000/admin y usar los siguientes datos para entrar:
- Usuario: Proyecto
- Clave: Proyecto
- Email: proyecto@gmail.com
Agregando el siguiente código al archivo
Proyecto/miapp/admin.py
:from django.contrib import admin from .models import Tabla1 # Register your models here. admin.site.register(Tabla1)
Ahora ya se puede listar, agregar, actualizar o eliminar registros en la tabla Tabla1.
-
Usando el modelo entidad-relación, crear las tablas y sus relaciones.
class TablaN(models.Model): """ Define la tabla TablaN """ tabla1 = models.ForeignKey(Tabla1, on_delete=models.CASCADE) campo1 = ??? campon = ??? def __str__(self): """ Se define la representación en str para TablaN """ return ???
Avisando a Django que hemos modificado el archivo
models.py
:(Proyecto) Ejemplo-02/Proyecto $ python manage.py makemigrations (Proyecto) Ejemplo-02/Proyecto $ python manage.py migrate (Proyecto) Ejemplo-02/Proyecto $
Agregando la tabla TablaN al administrador de Django y definiendo los campos a mostrar:
from .models import Tabla1, TablaN class TablaNAdmin(admin.ModelAdmin): # Se sobre escribe lo que hace __str__ list_display = ("id", "tabla1", "campo1", "campon") admin.site.register(TablaN, TablaNAdmin)
Abrir el navegador en la siguiente url ...
Abrir la url http://localhost:8000/admin y usar los siguientes datos para entrar:
- Usuario: Proyecto
- Clave: Proyecto
Se deberá de ver los distintos modelos agregados y se deberá de poder agregar registros a cada tabla.
-
Usando el Shell de Django definir las consultas que serán usadas para obtener los datos dinámicos para cada una de las páginas que lo requieran.
Iniciando el Shell de Django:
(Proyecto) Postwork/Proyecto $ python manage.py shell Python 3.7.3 (default, Mar 27 2019, 22:11:17) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>
Realizando la consulta para obtener todos los registros de la tabla ???:
>>> from miapp.models import ??? >>> ???.objects.all() <QuerySet [<???: Yo, Robot>, <???: El fin de la eternidad>, <???: El arte de la guerra>]> >>>
-
Imprime los datos de la tabla ??? el registro con
id = 3
:Dentro el Shell de Django:
>>> l3 = ???.objects.get(pk=3) >>> l3 <???: El arte de la guerra>
-
Convertir la plantilla
index.html
en una página base y la página para el index.Realizar una copia del archivo
index.html
y llamarlabase.html
:Postwork/Proyecto $ cp miapp/template/miapp/index.html miapp/template/base.html Postwork/Proyecto $
Modificar el archivo
base.html
para que se vea similar a lo siguiente:... <title>Proyecto - {% block title %}título de página{% endblock %}</title> ... {% block contenido %} {% endblock %}
Ahora se modifica el archivo
index.html
para que se va de la siguiente forma:{% extends "base.html" %}
-
A partir de aquí crear las páginas restantes del proyecto siguiendo los siguientes puntos:
- Agregar la ruta a la página en el archivo
urls.py
- Agregar la vista a la ruta en el archivo
views.py
- Agregar el archivos html que haga uso de base.html y que muestra el html de la página que se está agregando.
- Agregar a la vista el código correspondiente a los datos o procesamiento POST necesario para la página en turno.
- Agregar la ruta a la página en el archivo
Que Django te acompañe!