Introducción a DJango

  • 549 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
549
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
12
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. Luis Cruz @7Talks@lcruzc
  • 2. CTO & Co-founder Experimento Social
  • 3. Python
  • 4. Python• Lenguaje dinámico• Fuertemente tipado• Código abierto y multiplataforma• Archivos extensión .py
  • 5. SintaxisNo utiliza estructuras del tipo “{ ... } “ paradefinir bloques, sino que utiliza identaciónif 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 datosLos típicos string, int, float, long,bool>>> 1 + 23>>> 1 + 212>>> 1 + 2Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot concatenate str and intobjects
  • 7. Cosas InteresantesSwap>>> a = 2>>> b = 3>>> a, b = b, ay con split...>>> year, month, day = "2011-12-01".split("-")
  • 8. Cosas InteresantesManera tradicionalif (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”Generadoresdef date_range(start, end): for n in range((end-start).days): yield start + datetime.timedelta(n)Usostart = 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 decoradordef log_decorator(f): def wrapper(): print "inicio" f() print "end" return wrapperMucho más elegante@log_decoratordef hacer_algo(): print "algo"hacer_algo()
  • 13. Primeros Pasos
  • 14. Python Shelldevelop$ pythonPython 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 darwinType "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
  • 16. VirtualEnv
  • 17. VirtualEnvDescargarhttp://pypi.python.org/pypi/virtualenvInstalarpython setup.py install
  • 18. Comandos basicos de virtualenvCreando una ambientelabs$ virtualenv WS_ENVNew python executable in WS_ENV/bin/pythonInstalling setuptools............done.Installing pip...............doneActivando un ambientesource WS_ENV/bin/activateDesactivando un ambientedeactivate
  • 19. DJango
  • 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
  • 22. InstalaciónCon virtualenvmyambiente/bin/pip install django
  • 23. Organización
  • 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
  • 27. Creando una Aplicación
  • 28. Creando un proyectoCrear un proyectoworkshop$ django-admin.py startproject labdjangoCrear un aplicaciónlabdjango$ python manage.py startapp myapp
  • 29. Configurando la base de datosDATABASES = { default: { ENGINE: django.db.backends.sqlite3, NAME: database.db, USER: , PASSWORD: , HOST: , PORT: , }}
  • 30. Ejecutando el servidorlabdjango$ python manage.py runserverValidating models...0 errors foundDjango version 1.3, using settings labdjango.settingsDevelopment 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
  • 31. Corriendo la aplicación
  • 32. Persistencia
  • 33. Creando un modelofrom django.db import modelsclass 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 datoslabdjango$ python manage.py syncdbCreating tables ...You just installed Djangos auth system, which means youdont have any superusers defined.Would you like to create one now? (yes/no): yesUsername (Leave blank to use lcruzc): adminE-mail address: lcruzc@gmail.comPassword:Password (again):Superuser created successfully.Installing custom SQL ...Installing indexes ...No fixtures found.
  • 35. ORM ILlamado al nuestro shell bajo “django”workshop$ python manage.py shellObteniendo los objetos>> Categoria.objects.all()Creando un objeto>> categoria = Categoria(nombre = ‘Deportes’)>> categoria.save()
  • 36. ORM IIRecuperando 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 IIIRecuperando 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()
  • 38. Enrutamiento y Vistas
  • 39. Configurando mis ruteosurlpatterns = patterns(, (r^articles/2003/$, ), (r^/$, myapp.views.index), (r^noticias/$, myapp.views.listado), (r^noticia/(?P<id>d+)/$, myapp.views.detalle),)
  • 40. Configurando mis ruteosfrom django.shortcuts import renderfrom labdjango.myapp.models import Categoria, Noticiadef 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 })
  • 41. Plantillas
  • 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%}
  • 44. Administrador
  • 45. Administrador
  • 46. Registrando mis modelosfrom labdjango.myapp.models import Region, Sucursaladmin.site.register(Region)admin.site.register(Sucursal)
  • 47. Registrando mis modelosINSTALLED_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 modelosfrom django.conf.urls.defaults import patterns,include, urlfrom django.contrib import adminadmin.autodiscover()urlpatterns = patterns(, # Uncomment the next line to enable the admin: url(r^admin/, include(admin.site.urls)),)
  • 49. Administrador muy configurableclass NoticiaAdmin(admin.ModelAdmin):! search_fields = [titulo, detalle]! list_filter = (estado,)! list_display = (categoria, titulo,fecha)! date_hierarchy = fecha!
  • 50. Forms
  • 51. Forms Ifrom django import formsclass ContactoForm(forms.Form): asunto = forms.CharField(max_length=100) mensaje = forms.CharField() email = forms.EmailField()
  • 52. Forms IIdef 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>
  • 54. Vistas Genéricas
  • 55. direct_to_templatefrom 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,}
  • 57. FinLuis Cruz@lcruzc