SlideShare una empresa de Scribd logo
1 de 57
Luis Cruz
            @7Talks
@lcruzc
CTO & Co-founder




  Experimento Social
Python
Python
• Lenguaje dinámico
• Fuertemente tipado
• Código abierto y multiplataforma
• Archivos extensión .py
Sintaxis
No utiliza estructuras del tipo “{ ... } “ para
definir bloques, sino que utiliza identación
if a == 1:
    print “Algo”
print “Algo mas”

if a == 1:
    print “Algo”
    print “Algo mas”



for a in arr:
    print “Otra cosa”

def myfunc():
    return “y aún más”
Tipos de datos
Los típicos string, int, float, long,bool
>>> 1 + 2
3
>>> '1' + '2'
'12'
>>> '1' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int'
objects
Cosas Interesantes
Swap
>>> a = 2
>>> b = 3
>>> a, b = b, a



y con split...
>>> year, month, day = "2011-12-01".split("-")
Cosas Interesantes
Manera tradicional
if (a == b) {
    c = x
} else {
    c = y
}


the python way..
c = x if a == b else y
Cosas Interesantes
        ¿Números entre 0 y 15 que sean
            divisibles por 1 o 5?
>>> a = [i for i in range(15) if not (i%3 and   i%5)]
>>> a
[0, 3, 5, 6, 9, 10, 12]




filter(lambda x:not (x%5 and x%3), range(15))
Cosas Interesantes
   “Generadores”
Generadores
def date_range(start, end):
    for n in range((end-start).days):
        yield start + datetime.timedelta(n)



Uso
start = datetime.datetime(2011, 01, 1)
end = datetime.datetime(2011, 01, 15)
for date in date_range(start, end):
    print date
Cosas Interesantes
  “Decoradores”
Caso:
def hacer_algo():
    print "algo"

hacer_algo()


Caso con Logs:
def hacer_algo_con_logs():
    print "inicio"
    hacer_algo()
    print "end"

hacer_algo_con_logs()
Cosas Interesantes
 “Decoradores”
Implementar un decorador
def log_decorator(f):

    def wrapper():
        print "inicio"
        f()
        print "end"

    return wrapper


Mucho más elegante
@log_decorator
def hacer_algo():
    print "algo"

hacer_algo()
Primeros Pasos
Python Shell
develop$ python
Python 2.6.7 (r267:88850, Aug 22 2011, 18:14:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658)
(LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license"
for more information.
>>>
Python Shell

>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]



>>> from djangolab.myapp.models import MyModel


>>> import __hello__

>>> import this
VirtualEnv
VirtualEnv

Descargar
http://pypi.python.org/pypi/virtualenv



Instalar
python setup.py install
Comandos basicos de
    virtualenv
Creando una ambiente
labs$ virtualenv WS_ENV
New python executable in WS_ENV/bin/python
Installing setuptools............done.
Installing pip...............done

Activando un ambiente
source WS_ENV/bin/activate


Desactivando un ambiente
deactivate
DJango
Caracteristicas
• Don’t Repeat Yourself
• Estructura de trabajo MTV
• URL amigables
• Sistema de admistración
• Plantillas
• Soprte GIS
Flujo
   Request

 Enrutamiento

    Vista

    HTML

  Response
Instalación

Con virtualenv
myambiente/bin/pip install django
Organización
Organización
- proyecto
  - aplicación 1
     - views.py
     - models.py
  - aplicación 2
     - views.py
     - models.py
  - aplicación 3
     - views.py
     - models.py
  - settings.py
  - urls.py
Archivos del Proyecto

• settings.py: almacena los parametros de
  configuración de la aplicación
• urls.py: almacena los ruteos
• manage.py: comandos y utilidades para
  ejecutar sobre el proyecto
Archivos de la
         Aplicación

• models.py: modelos propios de la
  aplicación
• views.py: vistas (controladores)
• tests.py: aquí se incluyen nuestros tests o
Creando una Aplicación
Creando un proyecto

Crear un proyecto
workshop$ django-admin.py startproject labdjango



Crear un aplicación
labdjango$ python manage.py startapp myapp
Configurando la base
     de datos
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'database.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}
Ejecutando el servidor

labdjango$ python manage.py runserver
Validating models...

0 errors found
Django version 1.3, using settings 'labdjango.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[17/Nov/2011 20:11:31] "GET / HTTP/1.1" 200 2057
Corriendo la aplicación
Persistencia
Creando un modelo

from django.db import models

class Noticia(models.Model):

    fecha = models.DateField(null=True)
    categoria = models.ForeignKey(Categoria)
    titulo = models.CharField(max_length=100, blank=True)
    detalle = models.TextField(max_length=100)
Sincoronizando con
    nuestra base de datos
labdjango$ python manage.py syncdb
Creating tables ...


You just installed Django's auth system, which means you
don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'lcruzc'): admin
E-mail address: lcruzc@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.
ORM I
Llamado al nuestro shell bajo “django”
workshop$ python manage.py shell


Obteniendo los objetos
>> Categoria.objects.all()



Creando un objeto
>> categoria = Categoria(nombre = ‘Deportes’)
>> categoria.save()
ORM II
Recuperando un objeto
>> categoria = Categoria.objects.get(pk=1)


Recuperando un objeto
>> categoria = Categoria.objects.get(nombre=‘Deportes’)



Buscando un conjunto de objetos
>> noticias = noticia.objects.filter(estado = 'Publicada')
ORM III
Recuperando un objeto (join)
>> Noticia.objects.filter(categoria__nombre   = 'Deportes')


Recuperando objetos relacionados
>> categoria = Categoria.objects.get(pk=1)
>> categoria.noticia_set.all()
[<Noticia: Ganamos la copa america>]


Borrando
>> categoria.delete()
Enrutamiento y Vistas
Configurando mis
               ruteos
urlpatterns = patterns('',
    (r'^articles/2003/$', ''),
    (r'^/$', 'myapp.views.index'),
    (r'^noticias/$', 'myapp.views.listado'),
    (r'^noticia/(?P<id>d+)/$', 'myapp.views.detalle'),
)
Configurando mis
                 ruteos
from django.shortcuts import render
from labdjango.myapp.models import Categoria, Noticia

def index(request):
    categoria = Categoria.objects.all()
    return render(request, 'index.html', { 'categoria':categoria })

def noticias(request):
    noticias = Noticia.objects.all()
    return render(request, 'index.html', { 'noticias':noticias })


def noticias(request, key):
    noticia = Noticia.objects.get(pk = int(key))
    return render(request, 'index.html', { 'noticia':noticia })
Plantillas
Plantillas I
 <div class="row">
! ! {% for noticia in noticias %}
        <div class="span5">
          <h2>{{noticia.titulo}}</h2>
          <p>{{noticia.detalle}}</p>
          <p>
            <a href="/noticia/{{noticia.id}}/">Ver detalle</a>
          </p>
        </div>
 ! ! {% endfor %}
</div>
Plantillas II
{% extends "base.html" %}


{% block "content" %}
<div class="row">
! <div class="span12">
! ! <h2>{{noticia.titulo}} - {{noticia.fecha|date:"d/m/Y"}}</
h2>
! ! <p>{{noticia.detalle}}</p>
! ! <p><a class="btn" href="/">Volver &raquo;</a></p>
! </div>
</div>
{% endblock%}
Administrador
Administrador
Registrando mis
          modelos

from labdjango.myapp.models import Region, Sucursal


admin.site.register(Region)
admin.site.register(Sucursal)
Registrando mis
          modelos
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'labdjango.myapp'
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
)
Registrando mis
          modelos
from django.conf.urls.defaults import patterns,
include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)
Administrador muy
     configurable

class NoticiaAdmin(admin.ModelAdmin):
! search_fields = ['titulo', 'detalle']
! list_filter = ('estado',)
! list_display = ('categoria', 'titulo','fecha')
! date_hierarchy = 'fecha'
!
Forms
Forms I

from django import forms

class ContactoForm(forms.Form):
    asunto = forms.CharField(max_length=100)
    mensaje = forms.CharField()
    email = forms.EmailField()
Forms II
def contacto(request):
    if request.method == 'POST':
        form = ContactoForm(request.POST)
        if form.is_valid():
            # Hacemos Algo
            return redirect('/gracias/')
    else:
        form = ContactoForm()

    return render(request, 'contacto.html',
{ 'form': form })
Forms III
<div class="row">
! <form action="/contacto/" method="post">{% csrf_token %}
! {{ form.as_p }}
! <input type="submit" value="Enviar" />
! </form>
</div>
Vistas Genéricas
direct_to_template

from django.views.generic.simple import direct_to_template

...

(r'^gracias/$', direct_to_template,
     {'template': 'gracias.html', 'extra_context':context}),
list_detail.object_list
(r'^ultimas/$', list_detail.object_list, rule_info),




rule_info = {
    'queryset': Noticia.objects.order_by('-fecha')[:3],
    'extra_context':context,
    'template_name': 'ultimas.html',
}
Fin

Luis Cruz
@lcruzc

Más contenido relacionado

La actualidad más candente

Ejemplo de formulario
Ejemplo de formularioEjemplo de formulario
Ejemplo de formularioOVAWEB
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysqlI LG
 
Api De Google Calendar
Api De Google CalendarApi De Google Calendar
Api De Google Calendarjvelizster
 
Php excel
Php excelPhp excel
Php excelpcuseth
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPJavier Eguiluz
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQueryContinuum
 
Symfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y MigraciónSymfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y MigraciónRodrigo Miranda
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPressAsier Marqués
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Ignacio Martín
 
Como crear un blog 2 parte
Como crear un blog 2 parteComo crear un blog 2 parte
Como crear un blog 2 partedaniescribano16
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de javaSalvador Olivares
 
Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...jbersosa
 

La actualidad más candente (20)

Ejemplo de formulario
Ejemplo de formularioEjemplo de formulario
Ejemplo de formulario
 
Javascript y AJAX en Wordpress
Javascript y AJAX en WordpressJavascript y AJAX en Wordpress
Javascript y AJAX en Wordpress
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Api De Google Calendar
Api De Google CalendarApi De Google Calendar
Api De Google Calendar
 
Php excel
Php excelPhp excel
Php excel
 
Curso AngularJS - 5. rutas
Curso AngularJS - 5. rutasCurso AngularJS - 5. rutas
Curso AngularJS - 5. rutas
 
Ajax
AjaxAjax
Ajax
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
 
Introducción a los hooks
Introducción a los hooksIntroducción a los hooks
Introducción a los hooks
 
Symfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y MigraciónSymfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y Migración
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Angularjs Lógica de negocio
Angularjs Lógica de negocioAngularjs Lógica de negocio
Angularjs Lógica de negocio
 
Como crear un blog 2 parte
Como crear un blog 2 parteComo crear un blog 2 parte
Como crear un blog 2 parte
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de java
 
Zen AJAX - Programador PHP
Zen AJAX - Programador PHPZen AJAX - Programador PHP
Zen AJAX - Programador PHP
 
Primefaces hotel.. TERMINADO
Primefaces hotel.. TERMINADOPrimefaces hotel.. TERMINADO
Primefaces hotel.. TERMINADO
 
Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...
 

Similar a Python desde cero

Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a DjangoJoaquim Rocha
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Javier Eguiluz
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeersbetabeers
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicketAdrià Solé Orrit
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Javier Eguiluz
 

Similar a Python desde cero (20)

Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
EXAMEN
EXAMENEXAMEN
EXAMEN
 
Software de Búsqueda
Software de BúsquedaSoftware de Búsqueda
Software de Búsqueda
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Presentacion YII
Presentacion YIIPresentacion YII
Presentacion YII
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeers
 
Ajax
AjaxAjax
Ajax
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Cursos web
Cursos webCursos web
Cursos web
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
 
Django y Python para todos
Django y Python para todosDjango y Python para todos
Django y Python para todos
 
Guiapractica de bd completa
Guiapractica de bd completaGuiapractica de bd completa
Guiapractica de bd completa
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 

Último (15)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 

Python desde cero

  • 1. Luis Cruz @7Talks @lcruzc
  • 2. CTO & Co-founder Experimento Social
  • 4. Python • Lenguaje dinámico • Fuertemente tipado • Código abierto y multiplataforma • Archivos extensión .py
  • 5. Sintaxis No utiliza estructuras del tipo “{ ... } “ para definir bloques, sino que utiliza identación if a == 1: print “Algo” print “Algo mas” if a == 1: print “Algo” print “Algo mas” for a in arr: print “Otra cosa” def myfunc(): return “y aún más”
  • 6. Tipos de datos Los típicos string, int, float, long,bool >>> 1 + 2 3 >>> '1' + '2' '12' >>> '1' + 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects
  • 7. Cosas Interesantes Swap >>> a = 2 >>> b = 3 >>> a, b = b, a y con split... >>> year, month, day = "2011-12-01".split("-")
  • 8. Cosas Interesantes Manera tradicional if (a == b) { c = x } else { c = y } the python way.. c = x if a == b else y
  • 9. Cosas Interesantes ¿Números entre 0 y 15 que sean divisibles por 1 o 5? >>> a = [i for i in range(15) if not (i%3 and i%5)] >>> a [0, 3, 5, 6, 9, 10, 12] filter(lambda x:not (x%5 and x%3), range(15))
  • 10. Cosas Interesantes “Generadores” Generadores def date_range(start, end): for n in range((end-start).days): yield start + datetime.timedelta(n) Uso start = datetime.datetime(2011, 01, 1) end = datetime.datetime(2011, 01, 15) for date in date_range(start, end): print date
  • 11. Cosas Interesantes “Decoradores” Caso: def hacer_algo(): print "algo" hacer_algo() Caso con Logs: def hacer_algo_con_logs(): print "inicio" hacer_algo() print "end" hacer_algo_con_logs()
  • 12. Cosas Interesantes “Decoradores” Implementar un decorador def log_decorator(f): def wrapper(): print "inicio" f() print "end" return wrapper Mucho más elegante @log_decorator def hacer_algo(): print "algo" hacer_algo()
  • 14. Python Shell develop$ python Python 2.6.7 (r267:88850, Aug 22 2011, 18:14:53) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
  • 15. Python Shell >>> range(1,10) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> from djangolab.myapp.models import MyModel >>> import __hello__ >>> import this
  • 18. Comandos basicos de virtualenv Creando una ambiente labs$ virtualenv WS_ENV New python executable in WS_ENV/bin/python Installing setuptools............done. Installing pip...............done Activando un ambiente source WS_ENV/bin/activate Desactivando un ambiente deactivate
  • 20. Caracteristicas • Don’t Repeat Yourself • Estructura de trabajo MTV • URL amigables • Sistema de admistración • Plantillas • Soprte GIS
  • 21. Flujo Request Enrutamiento Vista HTML Response
  • 24. Organización - proyecto - aplicación 1 - views.py - models.py - aplicación 2 - views.py - models.py - aplicación 3 - views.py - models.py - settings.py - urls.py
  • 25. Archivos del Proyecto • settings.py: almacena los parametros de configuración de la aplicación • urls.py: almacena los ruteos • manage.py: comandos y utilidades para ejecutar sobre el proyecto
  • 26. Archivos de la Aplicación • models.py: modelos propios de la aplicación • views.py: vistas (controladores) • tests.py: aquí se incluyen nuestros tests o
  • 28. Creando un proyecto Crear un proyecto workshop$ django-admin.py startproject labdjango Crear un aplicación labdjango$ python manage.py startapp myapp
  • 29. Configurando la base de datos DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'database.db', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } }
  • 30. Ejecutando el servidor labdjango$ python manage.py runserver Validating models... 0 errors found Django version 1.3, using settings 'labdjango.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [17/Nov/2011 20:11:31] "GET / HTTP/1.1" 200 2057
  • 33. Creando un modelo from django.db import models class Noticia(models.Model): fecha = models.DateField(null=True) categoria = models.ForeignKey(Categoria) titulo = models.CharField(max_length=100, blank=True) detalle = models.TextField(max_length=100)
  • 34. Sincoronizando con nuestra base de datos labdjango$ python manage.py syncdb Creating tables ... You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (Leave blank to use 'lcruzc'): admin E-mail address: lcruzc@gmail.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... No fixtures found.
  • 35. ORM I Llamado al nuestro shell bajo “django” workshop$ python manage.py shell Obteniendo los objetos >> Categoria.objects.all() Creando un objeto >> categoria = Categoria(nombre = ‘Deportes’) >> categoria.save()
  • 36. ORM II Recuperando un objeto >> categoria = Categoria.objects.get(pk=1) Recuperando un objeto >> categoria = Categoria.objects.get(nombre=‘Deportes’) Buscando un conjunto de objetos >> noticias = noticia.objects.filter(estado = 'Publicada')
  • 37. ORM III Recuperando un objeto (join) >> Noticia.objects.filter(categoria__nombre = 'Deportes') Recuperando objetos relacionados >> categoria = Categoria.objects.get(pk=1) >> categoria.noticia_set.all() [<Noticia: Ganamos la copa america>] Borrando >> categoria.delete()
  • 39. Configurando mis ruteos urlpatterns = patterns('', (r'^articles/2003/$', ''), (r'^/$', 'myapp.views.index'), (r'^noticias/$', 'myapp.views.listado'), (r'^noticia/(?P<id>d+)/$', 'myapp.views.detalle'), )
  • 40. Configurando mis ruteos from django.shortcuts import render from labdjango.myapp.models import Categoria, Noticia def index(request): categoria = Categoria.objects.all() return render(request, 'index.html', { 'categoria':categoria }) def noticias(request): noticias = Noticia.objects.all() return render(request, 'index.html', { 'noticias':noticias }) def noticias(request, key): noticia = Noticia.objects.get(pk = int(key)) return render(request, 'index.html', { 'noticia':noticia })
  • 42. Plantillas I <div class="row"> ! ! {% for noticia in noticias %} <div class="span5"> <h2>{{noticia.titulo}}</h2> <p>{{noticia.detalle}}</p> <p> <a href="/noticia/{{noticia.id}}/">Ver detalle</a> </p> </div> ! ! {% endfor %} </div>
  • 43. Plantillas II {% extends "base.html" %} {% block "content" %} <div class="row"> ! <div class="span12"> ! ! <h2>{{noticia.titulo}} - {{noticia.fecha|date:"d/m/Y"}}</ h2> ! ! <p>{{noticia.detalle}}</p> ! ! <p><a class="btn" href="/">Volver &raquo;</a></p> ! </div> </div> {% endblock%}
  • 46. Registrando mis modelos from labdjango.myapp.models import Region, Sucursal admin.site.register(Region) admin.site.register(Sucursal)
  • 47. Registrando mis modelos INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'labdjango.myapp' # Uncomment the next line to enable the admin: 'django.contrib.admin', )
  • 48. Registrando mis modelos from django.conf.urls.defaults import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), )
  • 49. Administrador muy configurable class NoticiaAdmin(admin.ModelAdmin): ! search_fields = ['titulo', 'detalle'] ! list_filter = ('estado',) ! list_display = ('categoria', 'titulo','fecha') ! date_hierarchy = 'fecha' !
  • 50. Forms
  • 51. Forms I from django import forms class ContactoForm(forms.Form): asunto = forms.CharField(max_length=100) mensaje = forms.CharField() email = forms.EmailField()
  • 52. Forms II def contacto(request): if request.method == 'POST': form = ContactoForm(request.POST) if form.is_valid(): # Hacemos Algo return redirect('/gracias/') else: form = ContactoForm() return render(request, 'contacto.html', { 'form': form })
  • 53. Forms III <div class="row"> ! <form action="/contacto/" method="post">{% csrf_token %} ! {{ form.as_p }} ! <input type="submit" value="Enviar" /> ! </form> </div>
  • 55. direct_to_template from django.views.generic.simple import direct_to_template ... (r'^gracias/$', direct_to_template, {'template': 'gracias.html', 'extra_context':context}),
  • 56. list_detail.object_list (r'^ultimas/$', list_detail.object_list, rule_info), rule_info = { 'queryset': Noticia.objects.order_by('-fecha')[:3], 'extra_context':context, 'template_name': 'ultimas.html', }

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n