Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Curso Django
Search
paurosello
November 12, 2012
Technology
2
230
Curso Django
Curso Django ACM 2012
paurosello
November 12, 2012
Tweet
Share
Other Decks in Technology
See All in Technology
What’s new in Android development tools
yanzm
0
310
OPENLOGI Company Profile for engineer
hr01
1
34k
Geminiとv0による高速プロトタイピング
shinya337
1
270
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
160
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
120
KubeCon + CloudNativeCon Japan 2025 Recap Opening & Choose Your Own Adventureシリーズまとめ
mmmatsuda
0
270
How Do I Contact HP Printer Support? [Full 2025 Guide for U.S. Businesses]
harrry1211
0
120
fukabori.fm 出張版: 売上高617億円と高稼働率を陰で支えた社内ツール開発のあれこれ話 / 20250704 Yoshimasa Iwase & Tomoo Morikawa
shift_evolve
PRO
2
7.6k
第4回Snowflake 金融ユーザー会 Snowflake summit recap
tamaoki
1
280
Claude Code に プロジェクト管理やらせたみた
unson
6
3.9k
OPENLOGI Company Profile
hr01
0
67k
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
9
4.2k
Featured
See All Featured
Bash Introduction
62gerente
613
210k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Faster Mobile Websites
deanohume
307
31k
Speed Design
sergeychernyshev
32
1k
Music & Morning Musume
bryan
46
6.6k
Navigating Team Friction
lara
187
15k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Agile that works and the tools we love
rasmusluckow
329
21k
Transcript
Curso de Django I Pau Roselló Van Schoor
[email protected]
ACM
Facultad de Informática Universidad Politécnica de Madrid
Contenido ! Introducción ! Modelo ! Vista ! Template !
URLs ! Formulario ! Heroku
ACM Asociación de la Facultad de Informática de la UPM
Puedes contactar con nosotros en: ! Web: http://acm.asoc.fi.upm.es ! Twitter: @acmfiupm ! Búscanos en Facebook y Tuenti Existimos desde 1986
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
¿Aplicación web Django ? ! Protocolo: HTTP ! Lenguaje en el Servidor:
Python ! Lenguajes en el Cliente: HTML, Javascript, CSS
¿ Por qué elegir Django ? ! Desarrollo activo de
la comunidad ! MVC como patrón de desarrollo ! ORM integrado ! Urls organizadas y limpias ! Panel de Administración ! Escrito en Python!
Patrón de desarrollo (MVC) ! Modelo ! Abstracción de los
datos a almacenar definido mediante clases y guardado en la base de datos. ! Vista ! Actúa como el controlador de MVC y decide cual es la información que se le manda al usuario. ! Template ! Define como se presenta la infomación al usuario.
MVT Modelo Clases Datos Métodos Vista Métodos Prepara datos Sesión
Template Html Python
Iniciando un proyecto ! $> virtualenv venv && source venv/bin/activate
! $> pip install django ! $> django-admin.py startproject acmtut ! $> django-admin.py startapp encuestas
Configuración de la base de datos DATABASES = { ’default':
{ 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'db.db’ } }
Instalación de aplicaciones INSTALLED_APPS = ( …, 'encuestas’, ) url(r'^acmtut/',
include('acmtut.urls'))
Ejecutamos el servidor ! $> python manage.py runserver
Zona de administración urls.py from django.contrib import admin admin.autodiscover() urlpatterns
= patterns('’, … (r’ˆadmin/’, include(admin.site.urls)), …) Settings.py INSTALLED_APPS = ( … ’django.contrib.admin’, …)
Iniciar la base de datos ! $> python manage.py syncdb
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
Modelo BD ORM Clase
Modelo Tipos de Campos ! CharField ! DateTimeField ! EmailField
! ImageField ! SlugField Atributos de campo ! Blank ! Null ! Choices ! Default ! Unique
Modelo Simple from django.db import models class Votacion(models.Model): titulo =
models.CharField(max_length=150, primary_key=True) activa = models.BooleanField() fecha = models.DateTimeField(auto_now_add=True) slug = models.SlugField()
Modelo Simple def __unicode__(self): return self.titulo def save(self, *args, **kwargs):
self.slug = slugify(self.titulo) super(Votacion, self).save(*args, **kwargs) admin.site.register(Votacion)
Relaciones ! Muchos a uno ! votacion = models.ForeignKey(Votacion) !
Muchos a muchos ! ingredientes = models.ManyToManyField(Ingrediente) ! Uno a uno ! lugar = models.OneToOneField(Lugar)
Modelo con Relaciones class Voto(models.Model): votacion = models.ForeignKey(Votacion) opcion =
models.BooleanField() fecha = models.DateTimeField(auto_now_add=True) def __unicode__(self): return self.votacion + " " + self.opcion
Contenido ! Introducción ! Modelo ! Vista ! Template !
URLs ! Formulario ! Heroku
Vista Vista Métodos Prepara datos Sesión
Vista ! Recojemos los datos y describimos la lógica de
la vista ! Preparamos los datos a presentar ! Devolvemos la plantilla con los datos recogidos
Vista def inicio(request): return render_to_response( 'portada.html', { 'votaciones' : Votacion.objects.all()
}, )
Vista def activas(request): votaciones = Votacion.objects.filter(activa=True) return render_to_response( 'portada.html', {
’nvotaciones' : votaciones.count(), 'votaciones' : votaciones }, )
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
Template HTML CSS Javascript Lógica Python
Template {% if is_logged_in %} <h1> Bienvenido {{usuario.nombre}} </h1> {%
else %} <h1> Hola desconocido </h1> {% endif %}
Herencia Templates base.html Votacion.html Voto.html
Herencia Templates {% extends “base.html” %} {% block contenido %}
{% for votacion in votaciones %} <h1>{{votacion.titulo}}</h1> <h2>{{votacion.fecha|date:"d/m/Y”}}</h2> {% endfor %} {% endblock %}
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
URL urlpatterns = patterns('', url(r'^activas$', 'encuestas.views.activas', name=’activas'), )
URLs url(r'^votar/(\d)/(\d)$', 'encuestas.views.realizar_voto'), url(r’^votacion/(?P<pk>\d{4})/$’,‘encuestas.views.votacion’
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
Formulario de un Modelo from django.forms import ModelForm class ArticleForm(ModelForm):
class Meta: model = Votacion fields = ('titulo', 'activa')
Vista de Formulario contexto = RequestContext(request) if request.method == 'POST':
form = ArticleForm(request.POST, request.FILES) if form.is_valid(): form.save()
! Introducción ! Modelo ! Vista ! Template ! URLs
! Formulario ! Heroku
Heroku ! Ejecución del servidor de Django. ! Base de
datos. ! Pluguins para control y gestión de la aplicación. ! Actualizaciones rápidas. ! Aumentar los recursos de forma fácil y rápida.
Heroku $> heroku create $> pip install psycopg2 dj-database-url
Heroku $> pip freeze > requirements.txt $> git push heroku
master
Heroku $> heroku run python manage.py syncdb $> heroku open
Heroku ! $> heroku logs (ver los logs de la
aplicacion) ! $> heroku info (información sobre la aplicación) ! $> heroku pg:info (ver informacion sobre la bd)
Repositorio https://github.com/paurosello/tutorialACM
Fin ¿Preguntas? ¿Sugerencias?