Desarrollo Web
Utilizando python + Django
Miguel Cantillana
COO/CTO Ewok Ingeniería S.A
https://github.com/mcantillana
Profesor Adjunto @icinf_
Desarrollo Web
Frontend vs Backend
¿Que utilizaremos?
Python
+
Django
+
SQLite3
+
html5
+
CSS3
+
JS
Django
el web framework para perfeccionistas con deadline
Qué es Django?
Django es un entorno de desarrollo web escrito en Python que fomenta el desarrollo rápido y el diseño limpio y pragmático (más rápido y con menos código).
La meta fundamental de Django es facilitar la creación de sitios web complejos.
Django pone énfasis en el re-uso, la conectividad y extensibilidad de componentes, el desarrollo rápido y el principio No te repitas.
Características
- Un mapeador objeto-relacional (ORM).
- Aplicaciones "enchufables" que pueden instalarse en cualquier página gestionada con Django.
- Un sistema extensible de plantillas .
- Un despachador de URLs basado en expresiones regulares.
- Soporte de internacionalización, incluyendo traducciones incorporadas de la interfaz de administración.
- Un sistema incorporado de "vistas genéricas" que ahorra tener que escribir la lógica de ciertas tareas comunes.
El Zen de Python
- Hermoso es mejor que feo.
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Sencillo es mejor que anidado.
- Escaso es mejor que denso.
- La legibilidad cuenta.
Sitios que utilizan o utilizaron Django
- Discovery Comunication
- National Geographic
- Walt Disney
- The New York Times
- Mozilla Fundation
- Mas sitios: https://www.djangosites.org/
Arquitectura
Ventajas
- Genera automáticamente un panel de administración de la BD.
- Soporta ORM.
- Patrón MVC.
- Facilita la integración con el frontend mediante el lenguaje de templates.
- Es modular.
- Bajo acoplamiento
- Rápido desarrollo.
- Gran cantidad de paquetes. 2.321 !
- Comunidad activa.
desventajas
- Dificultad para comprender MVT.
- La curva de aprendizaje suele ser un poco mas alta que otros frameworks de Django.
- Se dificulta mucho el trabajo para aplicaciones real-time.
a codear!
Que necesitamos!
virtualenv
pip
python 2.7+ o 3.x
Creando un proyecto
pip install django
django-admin startproject demo_unab .
.
|-- demo_unab
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py
Migración inicial
python manage.py migrate
python manage.py runserver 0.0.0.0:8080
python manage.py createsuperuser
Definiendo nuestro modelo
python manage.py startapp music
agregar app a setting
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'music'
]
class Album(models.Model):
name = models.CharField(max_length=144)
anio = models.PositiveIntegerField()
order = models.IntegerField()
class Song(models.Model):
name = models.CharField(max_length=144)
minutes = models.PositiveIntegerField()
seconds = models.PositiveIntegerField()
album = models.ForeignKey(Album)
python manage.py makemigrations music
python manage.py migrate music
Registrando nuestros modelos en django-admin
admin.site.register(Album)
admin.site.register(Song)
Data de prueba
## Cargando data de pruebas
pip install django-autofixture
python manage.py loadtestdata music.Album:10 music.Song:50
class AlbumAdmin(admin.ModelAdmin):
list_display = ('name','anio','order')
# list_search = ['nombre','apodo']
# list_filter = ('anio',)
class SongAdmin(admin.ModelAdmin):
list_display = ('name','duration')
Modificando nuestro modelo
class Song(models.Model):
name = models.CharField(max_length=144)
minutes = models.PositiveIntegerField()
seconds = models.PositiveIntegerField()
track_number = models.PositiveIntegerField()
album = models.ForeignKey(Album)
def duration(self):
return '%d:%d' % (self.minutes,self.seconds)
Agreguemos frontend
## urls.py
from django.conf.urls import url
from django.contrib import admin
from music import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^albums/$', views.album_list, name='album'),
url(r'^albums/detail/(?P<pk>\d+)$', views.album_detail, name='album-detail'),
]
## views.py
from django.shortcuts import render
from .models import Album, Song
def album_list(request):
data = {}
template_name = 'album/album_list.html'
data['object_list'] = Album.objects.all()
return render(request,template_name,data)
def album_detail(request,pk):
data = {}
template_name = 'album/album_detail.html'
data['object_list'] = Song.objects.filter(album__id=pk)
return render(request,template_name,data)
Bootstrap y más!
Desarrollo Web con Django
By Miguel Cantillana
Desarrollo Web con Django
- 678