Este documento presenta una introducción al lenguaje de programación Python. Explica características como su sintaxis sin llaves, tipos de datos comunes, y estructuras útiles como generadores y decoradores. También cubre el framework Django para desarrollo web, incluyendo organización de proyectos, ORM, enrutamiento, vistas y plantillas. Finalmente, introduce conceptos como formularios, vistas genéricas y el administrador de Django.
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("-")
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
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.
>>>
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
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()
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)),
)
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 })