Introducción a Django
Miguel Cantillana F
<miguel@ewok.cl>
Qué es Django?
Django es un framework de desarrollo web de código abierto, escrito en el Python. Utiliza el patro de diseño modelo vista controlador (MTV).
Django, el web framework para perfeccionistas
Características
- Django promueve el desarrollo rápido, se construyen aplicaciones en cuestión de días y con el conocimiento suficiente esos días se pueden reducir a horas.
- Django impulsa el desarrollo de código limpio al promover buenas prácticas de desarrollo web, sigue el principio DRY (conocido también como Una vez y sólo una).
- Django usa una modificación de la arquitectura Modelo-Vista-Controlador (MVC), llamada MTV (Model – Template – View), que sería Modelo-Plantilla-Vista, está forma de trabajar permite que sea pragmático.
Framework 3.0
Arquitectura
Entendiendo como trabaja Django
Arquitectura MVC MTV
Componentes básicos
Componentes
- URL dispatcher
- Vistas
- Plantillas
- Modelos (ORM)
- Admin
Instalación y primera aplicación
docker-compose run web django-admin startproject main .
├── docker-compose.yml
├── Dockerfile
├── main
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── requirements.txt
Estructura del proyecto
docker
- Permite encapsular nuestro proyecto
- Manejar dependencias
- Evitar problemas de versiones de bibliotecas
docker-compose.yml
version: '3'
services:
web:
image: mcantillana/django_unab:3
ports:
- "8000:8000"
command: python manage.py runserver 0:8000
volumes:
- .:/code
docker-compose run web django-admin startproject main .
├── db.sqlite3
├── docker-compose.yml
├── main
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
docker-compose run web python manage.py migrate
docker-compose up
docker-compose up -d
setting.py
Base de datos
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Otras Configuraciones
# Codificación de caracteres
#encoding:utf-8
# Zona horaria
TIME_ZONE = 'America/Santiago'
# Configuración del idioma
LANGUAGE_CODE = 'es-CL'
Django Admin
docker-compose run web python manage.py createsuperuser
Django App
Proyecto
App1
App2
App3
App4
Creando aplicaciones
docker-compose run web python manage.py startapp blog
├── mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
├── manage.py
└── blog
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── views.py
# se debe registrar el app en setting.py
Modelos
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Definición de un modelo
Registrando Modelos en Admin
APP/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
APP/admin.py
class OrderItemInline(admin.StackedInline):
model = Order_Item
extra = 0
class OrderProfileAdmin(admin.ModelAdmin):
list_display = ('name', 'paternal_name', 'maternal_name', 'gender', 'email', 'circuit', 'category', 'identification_type', 'identification_country', 'identification_number', 'created', 'updated')
list_filter = ('circuit','category',)
class OrderAdmin(admin.ModelAdmin):
list_display = ('firstname', 'lastname', 'total', 'status', 'created', 'updated','id','uuid')
list_filter = ('status',)
search_fields = ['id','uuid',]
inlines = [OrderItemInline]
class OrderStatusAdmin(admin.ModelAdmin):
list_display = ('name', 'order', 'id')
class OrderDiscountAdmin(admin.ModelAdmin):
list_display = ('name', 'percent', 'code', 'quotas', 'start', 'end', 'created', 'updated', 'race','id')
class OrderDiscountHistoryAdmin(admin.ModelAdmin):
list_display = ('discount', 'ticket', 'order_item', 'date', 'created', 'updated','id')
admin.site.register(Order,OrderAdmin)
admin.site.register(Order_Status,OrderStatusAdmin)
admin.site.register(Order_Profile,OrderProfileAdmin)
admin.site.register(Order_Discount,OrderDiscountAdmin)
admin.site.register(Order_Discount_History,OrderDiscountHistoryAdmin)
Django SHELL
python manage.py shell
Actividad
Ejercicio Django
- Desarrolle un modelo en Django que permita relacionar noticias con categorías.
- Cada noticia puede pertenecer a una categoría y cada categoría puede pertenecer a más de una noticia.
- Cada noticia debe contener un titulo, cuerpo de contenido, estado de publicación y fecha de publicación.
- Cada categoría debe contener como mínimo un nombre, estado y orden.
- Debe completar el sistema con 1000 registros de ejemplo
UNAB: DW08 / Introducción a Django
By Miguel Cantillana
UNAB: DW08 / Introducción a Django
Clase 8
- 1,320