Framework
Django
>
_
David Bohórquez, M.Sc.
David Bohórquez, M.Sc.
Framework de desarrollo web de alto nivel que fomenta el desarrollo rápido y y el diseño limpio. Se encarga de gran parte de la molestia del desarrollo web, por lo que puede concentrarse en escribir su aplicación sin necesidad de reinventar la rueda. Es gratuito y de código abierto.
Rápido
Django fue diseñado para ayudar a los desarrolladores a llevar las aplicaciones desde el concepto hasta la finalización lo más rápido posible.
Seguro
Django se toma la seguridad en serio y ayuda a los desarrolladores a evitar muchos errores de seguridad comunes.
Escalable
Algunos de los sitios más concurridos de la web aprovechan la capacidad de Django para escalar de forma rápida y flexible.
Características Django
Sitios populares que usan Django
Patrón MVC vs MVT
Las siglas en inglés MVT corresponden a Model (Modelo), View (Vista) y Template (Plantilla). En la practica el patrón MVT es muy similar al MVC a tal punto que se puede decir que Django es un framework MVC.
Vista: Decide que información mostrar y cómo mostrarla.
Controlador: Es quien responde a las peticiones, decide que vista usar y si es necesaria información accede al modelo.
Patrón MVT
En Django, el controlador sigue estando presente, nada más que de una manera intrínseca, ya que todo el framework Django es el controlador.
Modelo: Maneja todo lo relacionado con la información, esto incluye como acceder a esta, la validación, relación entre los datos y su comportamiento.
Vista: Es un enlace entre el modelo y el template.
Decide que información
será mostrada y por cual template.
Template: Decide como
será mostrada la información.
Patrón MTV
Al momento de hacer click en un enlace o escribir una dirección (1) a lo primero que se accede es al mapa de URLs, en este archivo cada ruta esta asociado con una view (2), si se necesita algún dato se solicitara este a model (3) el cual a su vez generara la consulta a la base de datos, cuando los datos han sido traídos estos son enviados al template (4) que contiene la lógica de presentación para estos. Luego de "pintar" la página ésta se envía al navegador y se muestra al usuario que hizo la solicitud (5).
Además de las bases de datos oficialmente soportadas, existen otras ofrecidas por terceros, que permiten utilizar otras bases de datos con Django como son: SAP SQL, Anywhere, IBM, DB2, Microsoft SQL Server, Firebird, ODBC, ADSDB. Es muy recomendable PostgreSQL, el cual logra un balance fino entre el costo, características, velocidad y estabilidad.
Bases de datos
Virtualenv es una herramienta para crear diferentes entornos de desarrollo Python, gracias a virtualenv podemos implementar diferentes proyectos con herramientas como (frameworks, bibliotecas graficas, ...).
Entorno Virtual
python -m venv env
env\Scripts\activate
deactivate
ENTORNO VIRTUAL
5.ESTRUCTURA DEL PROYECTO
django-admin startproject misitio
misitio/
manage.py
misitio/
__init__.py
settings.py
urls.py
wsgi.py
6.ESTRUCTURA DEL PROYECTO
django-admin startproject misitio
misitio/
manage.py
misitio/
__init__.py
settings.py
urls.py
wsgi.py
7.SERVIDOR DE DESARROLLO
python manage.py migrate
python manage.py runserver
8.SERVIDOR DE DESARROLLO
El comando runserver inicia el servidor de desarrollo en el puerto 8000, escuchando sólo conexiones locales. Ahora que el servidor está corriendo, visita la dirección http://127.0.0.1:8000/ con tu navegador Web. Verás una página de ‘‘Bienvenida a Django’’.
9.HOLA MUNDO
from django.http import HttpResponse
def index(request):
return HttpResponse ("Hola mundo en Django")
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='index'),
]
python manage.py runserver
10.PRIMER TEMPLATE
from django.shortcuts import render
def index(request):
return render(request,'index.html',{
#context
})
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['templates'],
4. En el archivo views.py modificar el script. Importar función render encargada de renderizar un archivo HTML. Esta función recibe tres argumentos.
11.INTEGRACIÓN CON BOOTSTRAP
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js" integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf" crossorigin="anonymous"></script>
12. CONTEXTO
Un diccionario en Python es un mapeo entre llaves conocidas y valores de variables. El contexto permite pasar valores a un template. Para llamar una variable se utilizan dobles llaves {{ variable }}
from django.shortcuts import render
def index(request):
return render(request, "index.html", {
'message': 'Nuevo mensaje'
})
2. En el index.html se llama la variable entre dobles llaves
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Template</title>
</head>
<body>
<h1>Hola mundo desde template en Django</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore voluptas cupiditate illo veritatis? Fugit consequuntur facilis pariatur, dolorem dolores tenetur quia repudiandae cum deleniti quaerat, accusamus provident molestias sequi repellendus?</p>
<h1> {{ message }} </h1>
</body>
</html>
Django
13.CONFIGURACIÓN DE BASE DE DATOS
De forma predeterminada, la configuración utiliza SQLite. SQLite se incluye en Python, por lo que no necesitará instalar nada más para admitir la base de datos. Sin embargo, al iniciar su primer proyecto real, es posible que desee utilizar una base de datos más escalable como PostgreSQL.
Si desea utilizar otra base de datos, instale los enlaces de base de datos adecuados y cambie las siguientes claves en el elemento DATABASES para que coincidan con la configuración de conexión de la base de datos:'default'.
14.CONFIGURACIÓN DE BASE DE DATOS
El nombre de la base de datos NAME. El valor predeterminado, almacenará el archivo en el directorio del proyecto. BASE_DIR / 'db.sqlite3'.
Si no se utiliza SQLite como base de datos, se deben agregar configuraciones adicionales como USER, PASSWORD, HOST y PORT.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'name_database',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
}
15.CONFIGURACIÓN DE BASE DE DATOS
pip install psycopg2
pip install mysqlclient
python -m pip install cx_Oracle --upgrade
Django
16.REQUERIMIENTOS
pip install freeze
pip freeze > requirements.txt
pip install -r requirements.txt
Generar un archivo de requisitos y luego instalarlos en otro entorno.
Instalar librería para listar los paquetes y dependencias instaladas.
Django
17.ESTRUCTURA DE UN PROYECTO
18.APLICACIONES
Django contiene un registro de aplicaciones instaladas que almacena la configuración y proporciona introspección. También mantiene una lista de modelos disponibles.
Este registro se denomina aplicaciones y está disponible en django.apps.
18.APLICACIONES
El término proyecto describe una aplicación web de Django. El paquete de Python del proyecto se define principalmente mediante un módulo de configuración, pero normalmente contiene otras cosas.
django-admin startproject sitemysitesettings.pyurls.pyasgi.pywsgi.py
El directorio raíz de un proyecto suele ser el contenedor para todas las aplicaciones de un proyecto que no están instaladas por separado. manage.py
El término aplicación describe un paquete de Python que proporciona algún conjunto de entidades. Las aplicaciones pueden reutilizarse en varios proyectos.
Las aplicaciones incluyen alguna combinación de modelos, vistas, plantillas, etiquetas de plantilla, archivos estáticos, URL, middleware, etc. Por lo general, se conectan a proyectos con la configuración de INSTALLED_APPS y, opcionalmente, con otros mecanismos como URLconfs, la configuración middleware o la herencia de plantillas.
19.APLICACIONES
Un proyecto Django contiene una o más aplicaciones dentro de él que trabajan juntas para potenciar una aplicación web. Esta es la razón por la que el comando para un nuevo proyecto Django es startproject.
Por ejemplo, un sitio de comercio electrónico Django del mundo real podría tener una aplicación para la autenticación del usuario user_authentication, otra aplicación para los pagos payments, y una tercera aplicación para los detalles details: cada una se centra en una parte aislada de la funcionalidad. Son tres aplicaciones distintas que viven dentro de un proyecto de nivel superior. Cómo y cuándo dividir la funcionalidad en aplicaciones es algo subjetivo, pero en general cada aplicación debe tener una función clara.
python manage.py startapp pages
├── pages
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
19.APLICACIONES
Revisemos lo que hace cada archivo de la aplicación:
├── pages
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
Django
20.MODELOS
Un modelo es la única fuente definitiva de información sobre los datos. Contiene los campos y comportamientos esenciales de los datos que está almacenando. Por lo general, cada modelo se asigna a una sola tabla de base de datos.
Lo básico:
Cada modelo es una clase de Python que subclase django.db.models.Model.
21.MODELOS
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
second_name = models.CharField(max_length=30, null=True)
Los siguientes argumentos son comúnes a la mayoría de los tipos de campo y pueden usarse al declararlos:
21.MODELOS
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
second_name = models.CharField(max_length=30, null=True, blank=True)
21.MODELOS
DateTimeField: Una fecha y hora, representadas en Python por una instancia.
DecimalField: Un número decimal de precisión fija, representado en Python por una instancia decimal. Valida la entrada mediante DecimalValidator.
DurationField: Un campo para almacenar períodos de tiempo - modelado en Python por timedelta.
EmailField: Un CharField que comprueba que el valor es una dirección de correo electrónico válida mediante EmailValidator.
ImageField: Hereda el funcionamiento de FileField y valida un objeto imagen.
FileField: Un campo de carga de archivos.
URLField: Para una dirección URL.
Tipos de campos comunes:
23.METADATOS
Puedes declarar metadatos a nivel de modelo para tu Modelo declarando class Meta.
class Meta:
ordering = ["-my_field_name"]
...
Una de las características más útiles de estos metadatos es controlar el orden por defecto de los registros que se devuelven cuando se consulta el tipo de modelo. Se hace especificando el orden de comprobación en una lista de nombres de campo en el atributo ordering. Como se muestra arriba, se puede invertir el orden de clasificación añadiendo el símbolo (-) como prefijo del nombre del campo. Así como ejemplo, si elegimos clasificar los libros de esta forma por defecto: los libros serán clasificados alfabéticamente por título, de la A al a Z, y luego por fecha de publicación dentro de cada título, desde el más reciente al más antiguo.
ordering = ["title", "-pubdate"]
Otro atributo común es verbose_name, un nombre descriptivo para la clase en forma singular y plural:
verbose_name = "BetterName"
Django
22.RELACIONES
OneToOneField: Una relación uno a uno. Conceptualmente, esto es similar a un ForeignKey con unique=True, pero el lado "reverse" de la relación devolverá directamente un único objeto. Esto es más útil como la clave principal de un modelo que "extiende" otro modelo de alguna manera; La herencia de varias tablas se implementa agregando una relación uno a uno implícita del modelo secundario al modelo primario, por ejemplo.
Django
24.SUPER USUARIO
La autenticación Django proporciona autenticación y autorización juntas y generalmente se conoce como el sistema de autenticación, ya que estas características están algo acopladas.
python manage.py createsuperuser
Django
25.AGREGAR MODELOS AL PANEL DE ADMIN
Django permite agregar modelos creados al panel de administración para que puedan ser fácilmente gestionados. Proporciona las acciones de CRUD: Create, Read, Update y Delete.
from django.contrib import admin
from .models import User, DocumentType
admin.site.register(User)
admin.site.register(DocumentType)
25.CAMBIAR IDIOMA AL PANEL DE ADMIN
Dirigirse al archivo settings.py
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'es-co'
#TIME_ZONE = 'UTC'
TIME_ZONE = 'America/Bogota'
USE_I18N = True
USE_L10N = True
USE_TZ = True
26.PERSONALIZAR ESTILOS PANEL DE ADMIN
Personalizar estilos con el paquete django-admin-interface
pip install django-admin-interface
INSTALLED_APPS = (
#...
'admin_interface', # Django 3
'colorfield', # Django 3
#...
'django.contrib.admin',
#...
)
X_FRAME_OPTIONS='SAMEORIGIN' # only if django version >= 3.0
python manage.py migrate
# python manage.py collectstatic
Ejecutar:
En el archivo settings.py agregar:
26.PERSONALIZAR ESTILOS PANEL DE ADMIN
Personalizar estilos con el paquete django-admin-interface
26.OPCIONES AVANZADAS PANEL DE ADMIN
Las opciones avanzadas permiten implementar acciones que por defecto no se tienen con
el registro de modelo.
@admin.register(DocumentType)
class DocumentTypeAdmin(admin.ModelAdmin):
list_display = ("name_document_type", "acronym")
list_display_links = ("name_document_type", "acronym")
list_editable = ("acronym")
search_fields = ("name_document_type")
list_filter = ("acronym")
list_per_page = 2
27.CICLOS Y CONDICIONALES
Para trabajar con ciclos o condicionales en Python se utiliza {% %}
{% for product in products %}
<p>{{ product.title }}</p>
{% endfor %}
{% if product == 'Camiseta' %}
<p>{{ product.title }}</p>
{% endif %}
28.ADMINISTRAR ARCHIVOS ESTÁTICOS
Por lo general, los sitios web necesitan servir archivos adicionales como imágenes, JavaScript o CSS. En Django, nos referimos a estos archivos como "archivos estáticos". Django proporciona django.contrib.staticfiles para ayudarle a administrarlos.
{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">
STATIC_URL = '/static/'
Configuración de archivos estáticos
Asegúrese de que está incluido en su INSTALLED_APPS.django.contrib.staticfiles
En el archivo de configuración, defina STATIC_URL, por ejemplo:
4. Almacena los archivos estáticos en una carpeta llamada static en la aplicación.
28.ADMINISTRAR ARCHIVOS ESTÁTICOS
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'sitio/static'),)
6. Agregar la ruta
5. En la carpeta static agregar tres carpetas.
static
-css
-images
-js
29.LOGIN
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
login(request, user)
messages.success(request, 'Bienvenido {}'.format(user.username))
return redirect('index')
else:
messages.error(request, 'Usuario o contraseña incorrecta')
return render(request, 'users/login.html',{
})
30.LOGOUT
def logout_view(request):
logout(request)
messages.success(request, 'Sesión finalizada')
return redirect('login')
31.IMPORTAR/EXPORTAR
Importar librerías en admin.py
pip install django-import-export
# settings.py
INSTALLED_APPS = (
...
'import_export',
)
from import_export import resources
from import_export.admin import ImportExportModelAdmin
class UserResource(resources.ModelResource):
class Meta:
model = User
fileds = ('first_name', 'last_name', 'id_doc', 'document_type',)
Built-in \( \LaTeX \) typesetting makes it dead simple to show math formulas.
6.LaTeX
f(x) = \int_{-\infty}^\infty
\hat f(\xi)\,e^{2 \pi i \xi x}
\,d\xi
7.EXPORTS
Download the complete reveal.js source code for your presentation. Great for offline presenting,
self-hosting or backups.
We provide PDF and PPT exports, too.
HTML
CSS
JS
Slides for Developers is available today. Jump right into the editor and try it out.
You'll need to sign up or log in