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
株式会社EventHub・エンジニア採用資料
eventhub
0
4.2k
10分で紹介するAmazon Bedrock利用時のセキュリティ対策 / 10-minutes introduction to security measures when using Amazon Bedrock
hideakiaoyagi
0
170
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
10
2.7k
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.5k
Postmanを使いこなす!2025年ぜひとも押さえておきたいPostmanの10の機能
nagix
2
120
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
730
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
660
APIファーストで実現する運用性の高い IoT プラットフォーム: SORACOMのアプローチ
soracom
PRO
0
240
WAF に頼りすぎない AWS WAF 運用術 meguro sec #1
izzii
0
460
20250208_OpenAIDeepResearchがやばいという話
doradora09
PRO
0
170
Googleマップ/Earthが一般化した 地図タイルのイマ
mapconcierge4agu
1
200
テストアーキテクチャ設計で実現する高品質で高スピードな開発の実践 / Test Architecture Design in Practice
ropqa
3
710
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.5k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Pragmatic Product Professional
lauravandoore
32
6.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Why Our Code Smells
bkeepers
PRO
335
57k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Cult of Friendly URLs
andyhume
78
6.2k
A better future with KSS
kneath
238
17k
Designing for humans not robots
tammielis
250
25k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
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?