Python
Django?
@bienvenidosaez
&
http://goo.gl/byclSU
Backend
La alegría de ser un backed
Los comienzos de los backend
Backend "en paro"
El boom de los backend
Cada vez hay más curro ya que todo necesita un backend
Ventajas de ser backend
Capacidad de elección de tecnología
Resoluciones
Pasamos de...
Navegadores
Dispositivos móviles
Python
Historia
- Python fue creado a finales de los ochenta por Guido van RossumBullet Two
Mi primer contacto con el lenguaje
Características
-
Lenguaje de alto nivel
-
Rápida curva de aprendizaje => novatos
-
Fácil lectura
-
Más tiempo leyendo código que programando
-
Multiplataforma
-
Multipropósito
Características
-
Fácil manejo de datos
-
Manejo de listas
-
Objetos
-
Obtener atributos
-
Setearlos
-
-
Programación orientada a objetos "bonita"
-
Sintaxis limpia
-
PEP
- Librerías
En otras palabras
if elemento not in lista
Si el elemento no está en la lista
The Zen of Python
The Zen of Python
Guía de estilos
# Declaración
a = 5
b = 4
Variables
# Tipado dinámico
a = 5
b = 'Hola mundo'
a = b
# Intercambiar valores
a = 5
b = 4
a,b = [b,a]
Variables
Listas
>>> lista = ["abc", 42, 3.1415]
>>> lista[0] # Acceder a un elemento por su índice
'abc'
>>> lista[-1] # Acceder a un elemento usando un índice negativo
3.1415
>>> lista.append(True) # Añadir un elemento al final de la lista
>>> lista
['abc', 42, 3.1415, True]
>>> del lista[3] # Borra un elemento de la lista usando un índice (en este caso: True)
>>> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la lista
>>> lista[0:2] # Mostrar los elementos de la lista del índice "0" al "2" (sin incluir este último)
['xyz', 42]
>>> lista_anidada = [lista, [True, 42L]] # Es posible anidar listas
>>> lista_anidada
[['xyz', 42, 3.1415], [True, 42L]]
>>> lista_anidada[1][0] # Acceder a un elemento de una lista dentro de otra lista (del segundo elemento, mostrar el primer elemento)
True
Listas
Métodos nativos como:
sort, reverse, len, min, max, remove, count, map, slice
Tuplas
>>> tupla = ("abc", 42, 3.1415)
>>> tupla[0] # Acceder a un elemento por su índice
'abc'
>>> del tupla[0] # No es posible borrar (ni añadir) un elemento en una tupla, lo que provocará una excepción
( Excepción )
>>> tupla[0] = "xyz" # Tampoco es posible re-asignar el valor de un elemento en una tupla, lo que también provocará una excepción
( Excepción )
>>> tupla[0:2] # Mostrar los elementos de la tupla del índice "0" al "2" (sin incluir este último)
('abc', 42)
>>> tupla_anidada = (tupla, (True, 3.1415)) # También es posible anidar tuplas
>>> 1, 2, 3, "abc" # Esto también es una tupla, aunque es recomendable ponerla entre paréntesis (recuerda que requiere, al menos, una coma)
(1, 2, 3, 'abc')
>>> (1) # Aunque entre paréntesis, esto no es una tupla, ya que no posee al menos una coma, por lo que únicamente aparecerá el valor
1
>>> (1,) # En cambio, en este otro caso, sí es una tupla
(1,)
>>> (1, 2) # Con más de un elemento no es necesaria la coma final
(1, 2)
>>> (1, 2,) # Aunque agregarla no modifica el resultado
(1, 2)
Diccionarios
>>> diccionario = {"cadena": "abc", "numero": 42, "lista": [True, 42L]}
>>> diccionario["cadena"] # Usando una clave, se accede a su valor
'abc'
>>> diccionario["lista"][0]
True
>>> diccionario["cadena"] = "xyz" # Re-asignar el valor de una clave
>>> diccionario["cadena"]
'xyz'
>>> diccionario["decimal"] = 3.1415927 # Insertar un nuevo elemento clave:valor
>>> diccionario["decimal"]
3.1415927
# También es posible que un valor sea un diccionario
>>> diccionario_mixto = {"tupla": (True, 3.1415), "diccionario": diccionario}
# Acceder a un elemento dentro de una lista, que se encuentra dentro de un diccionario
>>> diccionario_mixto["diccionario"]["lista"][1]
42L
Diccionarios
Métodos nativos como:
keys(), values(), items(), copy(), has_key()
Conjuntos
>>> conjunto_inmutable = frozenset(["a", "b", "a"])
>>> conjunto_inmutable
frozenset(['a', 'b'])
>>> conjunto1 = set(["a", "b", "a"]) # Primer conjunto mutable
>>> conjunto1
set(['a', 'b'])
>>> conjunto2 = set(["a", "b", "c", "d"]) # Segundo conjunto mutable
>>> conjunto2
set(['a', 'c', 'b', 'd']) # Recuerda, no mantienen el orden, como los diccionarios
>>> conjunto1 & conjunto2 # Intersección
set(['a', 'b'])
>>> conjunto1 | conjunto2 # Unión
set(['a', 'c', 'b', 'd'])
>>> conjunto1 - conjunto2 # Diferencia (1)
set([])
>>> conjunto2 - conjunto1 # Diferencia (2)
set(['c', 'd'])
>>> conjunto1 ^ conjunto2 # Diferencia simétrica
set(['c', 'd'])
Conjuntos
Métodos nativos como:
intersection, diferencia, union, diferencia_simétrica
Listas por comprensión
>>> range(5)
[0, 1, 2, 3, 4]
>>> [i*i for i in range(5)]
[0, 1, 4, 9, 16]
>>> lista = [(i, i + 2) for i in range(5)]
>>> lista
[(0, 2), (1, 3), (2, 4), (3, 5), (4, 6)]
>>> g = [ x ** 2 for x in range (10)]
[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81]
Slices
>>> x = range (1 , 10)
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x [:3]
[0 , 1, 2]
>>> x[:2]
[1, 2]
>>> x[:2]
[1, 2]
>>> x[-1]
9
>>> x[1:6:2]
[2, 4, 6]
x[start:end:step]
Pregunta
¿Alguna vez habéis intentado hacer una lista con los primeros 1000000000 números?
>>> [ x ** 2 for x in xrange (1000000000000000)]
# Tu ordenador explota
Generadores
¿Qué son?
>>> cuadrados = ( x ** 2 for x in range (1 , 11))
>>> cuadrados
< generator object < genexpr > at 0 x7f8b82504eb0 >
>>> next ( cuadrados )
1
>>> next ( cuadrados )
4
>>> cuadrados = ( x ** 2 for x in range (100000000000000))
>>> cuadrados
< generator object < genexpr > at 0 x7f8b82504eb0 >
>>> next ( cuadrados )
1
>>> next ( cuadrados )
4
Operadores lógicos
&& => and
|| => or
! => not
Condicionales
>>> verdadero = True
>>> if verdadero: # No es necesario poner "verdadero == True"
... print "Verdadero"
... else:
... print "Falso"
Verdadero
>>> lenguaje = "Python"
>>> if lenguaje == "C":
... print "Lenguaje de programación: C"
... elif lenguaje == "Python":
... print "Lenguaje de programación: Python"
... else:
... print "Lenguaje de programación: indefinido"
...
Lenguaje de programación: Python
>>> if verdadero and lenguaje == "Python":
... print "Verdadero y Lenguaje de programación: Python"
...
Verdadero y Lenguaje de programación: Python
Economía de condicionales
>> x = 4
>> x == 3 or x == 5 or x == 7:
False
>> x in (3 , 5 , 7)
False
>>> any ([ False , True , False ])
True
>>> any ([ False , False ])
False
>>> any ([])
False
>>> all ([ False , True , False ])
False
>>> all ([ True ])
True
>>> all ([])
True
Operador ternario
En casi todos los lenguajes
test ? a : b
En python
a if test else b
>>> x = 2
>>> " uno " if x == 1 else " otra cosa "
"otra cosa"
Bucles
>>> lista = ["a", "b", "c"]
>>> for i in lista: # Iteramos sobre una lista, que es iterable
... print i
...
a
b
c
>>> numero = 0
>>> while numero < 10:
... numero += 1
... print numero,
...
1 2 3 4 5 6 7 8 9
Sistema de objetos
Totálmente compatible con POO
Herencia múltiple
Sobrecarga de métodos
Sistema de objetos
Sistema de objetos
>>> cadena = "abc"
>>> cadena.upper()
'ABC'
>>> lista = [True, 3.1415] #List
>>> lista.append(42L)
>>> lista
[True, 3.1415, 42L]
>>> int ( True )
1
>>> int ( False )
0
>>> 37 + True
38
>>> 7 / False
Traceback ( most recent call last ):
File " < stdin > " , line 1, in < module >
ZeroDivisionError : float division
Intérprete
Integración con el OS
os
sys
Comparativa IDE's
Referencias
Django
Sorry. . .
Tranquilos
Historia
Nació en el otoño de 2003
The World Online
Toda su línea editorial en la red está basada en su propia versión del padre de Django
Framework
MTV
MTV
MTV
MTV
BBDD
BBDD
Models
Syncdb
ORM
Vistas (lógica)
Function Views
Vistas (Class Based Views)
Templates (presentación)
Separar lógica de presentación
Herencia de plantillas
Bloques
Condicionales
Bucles
Template Tags
Custom Template Tags
Templates (presentación)
URL
Formularios
Formularios
django-crispy-forms
i18n
django-rosetta
django-transmeta
Middleware
Shell
Servidor de desarrollo
Caché
Aplicaciones plug and play
django packages
Quien lo usa
instagram, the new york times, pinterest, nasa, mercedes, national geographic, the whashington post,
Referencias
http://django.es/docs/
http://stackoverflow.com/
¿Algo que objetar?
?
@bienvenidosaez
Python - Django
By Bienvenido Sáez Muelas
Python - Django
Taller de Python/Django en Betabeers Huelva
- 2,906