Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducción a Django

1,836 views

Published on

This is an introduction to Django that I gave in the University of Coruña. It is the same as I those in English but it's updated with generic views and model forms.

Esto es una introducción a Django que di en la Universidade da Coruña. Es la misma que las que tengo en inglés pero actualizada con vistas genéricas y formularios para modelos.

Published in: Technology
  • Be the first to comment

Introducción a Django

  1. 1. Introducción a DjangoUniversidade de A Coruña, 21 noviembre 2011 Joaquim Rocha <jrocha@igalia.com> http://www.joaquimrocha.com
  2. 2. ¿Qué es?"Django is a highlevel Python Web frameworkthat encourages rapid development andclean, pragmatic design."(de la página oficial de Django)
  3. 3. ¿Qué es?Proyecto interno de Lawrence Journal-World en 2003Debería ayudar a los periodistas con sus plazos cortosNo debería molestar a los periodistasLLeva el nombre del guitarrista Django Reinhardt
  4. 4. El frameworkObject-Relational Mapper (ORM)Interfaz de Admin automáticaDiseño de URLs elegantePoderoso sistema de plantillasi18n
  5. 5. Gran comunidadDjango tiene una gran comunidad y una extensa listade apps DjangoBuscalas en http://code.google.com,http://github.com o http://djangopackages.comOtras páginas web interesantes:Django Sites: http://www.djangosites.orgDjango People: http://www.djangopeople.orgDjango Community:https://www.djangoproject.com/community
  6. 6. Poner proyectos en producciónmod_wsgiFastCGImod_python...
  7. 7. Backend de BDSoportados oficialmente:PostreSQLMySQLSQLiteOracle
  8. 8. Usando a Django
  9. 9. InstalaciónTan simple como bajar el archivo o clonar el repositorio:http://djangoproject.com/downloadDespués:# python setup.py installO entonces:# easy_install install
  10. 10. Desarrollo
  11. 11. Creación de un proyecto$ django-admin.py startproject ProjectProject/ __init__.py manage.py settings.py urls.py
  12. 12. Executar de un proyecto$ ./manage.py runserver... y abre en tu navegador: localhost:8000
  13. 13. DesarrolloLos proyectos de Django tienen aplicacions (Apps)Las Apps son los componentes de los proyectos
  14. 14. Creación de una aplicación$ ./manage.py startapp my_appmy_app/ __init__.py models.py tests.py views.py
  15. 15. Construir la base de datos$ ./manage.py syncdb
  16. 16. Configuración de un proyectoConfiguración sencilla en el archivo settings.py
  17. 17. DesarrolloDjango sigue el patrón de diseño MTVModel-Template-View
  18. 18. ModelosLos modelos son classes que representan objetosen la base de datos¡Y no tendrás que tocar en SQL jamás!
  19. 19. Modelosclass Post(models.Model): title = models.CharField(max_length = 500) content = models.TextField() date = models.DateTimeField(auto_now = True) ...
  20. 20. VistasLas vistas son funciones que normalmenteprocesan modelos e renderizan HTML¡Es donde pasa la magia!¿Cómo obtener todos los posts desde hace 5 días y ordenarlospor fecha descendente?
  21. 21. Vistasimport datetimedef view_latest_posts(request): # Last 5 days date = datetime.datetime.now() - datetime.timedelta(5) posts = Post.objects.filter(date__gte = date).order_by(-date) return render_to_response(posts/show_posts.html, {posts: posts})
  22. 22. Vistas GenericasSon vistas todavía más rápidas de usar, paratareas comunes como listar o enseñar objetos.from django.views.generic import DetailView, ListViewurlpatterns = patterns(Project.posts.views, (r^view/(?P<pk>d+)/$, DetailView.as_view(model=Post)), (r^posts/$, ListView.as_view(model=Post)),Intentan usar los siguientes archivos por defecto:post_detail.html y post_list.html
  23. 23. Templates¡Prevendrán que te repitas!Y los designers no tendrán que tocar el código.
  24. 24. <html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body></html>
  25. 25. {% extends "base.html" %}{% block title %}Homepage{% endblock %}{% block content %} <h3>This will be some main content</h3> {% for post in posts %} <h4>{{ post.title }} on {{ post.date|date:"B d, Y"|upper }}<h4> <p>{{ post.content }}</p> {% endfor %} {% url project.some_app.views.some_view some arguments %}{% endblock %}
  26. 26. URLsEn Django, los URLs ¡son parte del diseño!urls.py usa expresiones regulares para mapear URLs con vistas
  27. 27. URLsurlpatterns = patterns(Project.some_app.views, (r^$, index), (r^posts/(?P<r_id>d+)/$, view_latest_posts), (r^create/$, create), url(r^view/post/(?P<p_id>d+)/$, view, name = view_post),)
  28. 28. FormulariosSon clases que representan un formulario HTMLDejan que se pueda facilmente configurar lostipos esperados de inputs, mensages de error,etiquetas, etc.
  29. 29. Formulariosclass CreatePost(forms.Form): title = forms.CharField(label = "Post Title", max_length = 500, widget = forms.TextInput(attrs={ class: big_entry })) content = forms.CharField() tags = forms.CharField(required = False)
  30. 30. Formulariosdef create_post(request): if request.method == POST: form = CreatePost(request.POST) if form.is_valid(): # Create a new post object with data # from form.cleaned_data return HttpResponseRedirect(/index/) else: form = CreatePost() return render_to_response(create.html, { form: form, })
  31. 31. Formularios<form action="/create/" method="POST"> {{ form.as_p }} <input type="submit" value="Create"/></form>
  32. 32. Formularios para modelsSon formularios que se crean automaticamente apartir de modelos, con tan solo:from django.forms import ModelFormclass PostForm(models.ModelForm): class Meta: model = Post
  33. 33. Proximos pasos
  34. 34. Hosts para DjangoUna extensa lista se encuentra en.http://code.djangoproject.com/wiki/DjangoFriendlyWebHostsLos populares:http://www.statopia.com/corporate/blog/2007/aug/05/PopularDjangoHostingService/El Google AppEngine también lo pone facil para Django:http://appengine.google.com/
  35. 35. AyudaDocumentación Django:https://docs.djangoproject.comCheat sheet:http://www.revsys.com/django/cheatsheet/Algunos libros:The Django Book: http://www.djangobook.com/Learning Website Development with Django, PacktPractical Django Projects, ApressPro Django, Apress

×