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
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
The Rise of LLMOps
asei
9
1.7k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
190
飲食店データの分析事例とそれを支えるデータ基盤
kimujun
0
200
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
3
150
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
130
複雑なState管理からの脱却
sansantech
PRO
1
160
SDN の Hype Cycle を一通り経験してみて思うこと / Going through the Hype Cycle of SDN
mshindo
1
110
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
260
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Building Your Own Lightsaber
phodgson
103
6.1k
Documentation Writing (for coders)
carmenintech
65
4.4k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Happy Clients
brianwarren
98
6.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Why Our Code Smells
bkeepers
PRO
334
57k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
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?