SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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...
 

Similaire à 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
 

Similaire à 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
 

Dernier

Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 

Dernier (20)

Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.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', }

Notes de l'éditeur

  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