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
220
Curso Django
Curso Django ACM 2012
paurosello
November 12, 2012
Tweet
Share
Other Decks in Technology
See All in Technology
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
1
1.3k
All you need to know about InnoDB Primary Keys
lefred
0
120
2.5Dモデルのすべて
yu4u
2
610
データ資産をシームレスに伝達するためのイベント駆動型アーキテクチャ
kakehashi
PRO
2
230
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
740
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
550
5分で紹介する生成AIエージェントとAmazon Bedrock Agents / 5-minutes introduction to generative AI agents and Amazon Bedrock Agents
hideakiaoyagi
0
220
事業継続を支える自動テストの考え方
tsuemura
0
300
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
15
5.5k
Classmethod AI Talks(CATs) #15 司会進行スライド(2025.02.06) / classmethod-ai-talks-aka-cats_moderator-slides_vol15_2025-02-06
shinyaa31
0
170
株式会社EventHub・エンジニア採用資料
eventhub
0
4.2k
スクラムのイテレーションを導入してチームの雰囲気がより良くなった話
eccyun
0
110
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
GraphQLとの向き合い方2022年版
quramy
44
13k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
A Tale of Four Properties
chriscoyier
158
23k
Six Lessons from altMBA
skipperchong
27
3.6k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
The Invisible Side of Design
smashingmag
299
50k
We Have a Design System, Now What?
morganepeng
51
7.4k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
What's in a price? How to price your products and services
michaelherold
244
12k
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?