Your SlideShare is downloading. ×
0
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Introducción a DJango
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introducción a DJango

609

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
609
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
13
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 »</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

    ×