Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taller de Django en español

Taller de Django en español

Taller de introducción a Django en español presentado por Antonio Melé (@zenxone) y Miguel Araujo (@maraujop) en el Betabeers de Octubre de 2011. Vídeo de la presentación.

En la segunda parte se introduce el ecosistema de aplicaciones de Django, sus principios y algunos ejemplos de uso.

1b6429aafe9e31ea3e3586e2edf80211?s=128

Miguel Araujo

October 19, 2011
Tweet

Transcript

  1. Taller de Django Betabeers Antonio Melé y Miguel Araujo 01

  2. Tests y Docs 02

  3. tests.py class BetabeersViewsTest(TestCase): fixtures = ['initial-data.json'] def setUp(self): self.client =

    Client() self.client.login(username="rebeca", password="rebeca") def test_login_200(self): context = { 'title': 'Betabeers Test note', 'text': 'I like beers more than beta', } response = self.client.post(reverse('post_note'), context) self.assertTrue(Note.objects.filter(title='Betabeers Test note').exists()) 03
  4. Ecosistema 04

  5. pip y PyPi PyPi (The Python Package Index): repositorio de

    software de Python https://github.com/pypa/pip: pip es el instalador pip install django • • • 05
  6. Virtual Environments (venvs) http://www.virtualenv.org/en/latest/index.html https://github.com/pypa/virtualenv virtualenvwrapper virtualenv-burrito mkvirtualenv betabeers workon

    betabeers • • • • • • 06
  7. Virtual Environments (venvs) ¿Una forma fácil de instalarlo todo? curl

    -s https://raw.github.com/brainsik/virtualenv- burrito/master/virtualenv-burrito.sh | bash • • 07
  8. Django apps 08

  9. django-debug-toolbar (DjDT) https://github.com/django-debug-toolbar/django-debug-toolbar Barra de debugging de aplicaciones Muestra información

    de una página: contexto disponible, sentencias SQL ejecutadas... Dispone de un sistema de plugins • • • • 09
  10. 10

  11. Pinax Plataforma de desarrollo extremo de aplicaciones web. Numerosas Django

    apps reutilizables integradas y manejables fácilmente. • • 11
  12. django-extensions https://github.com/django-extensions/django-extensions Amplia la lista de comandos disponibles Ayuda: python

    manage.py graph_models --help $ ./manage.py graph_models -a -g -o my_project.png • • • • 12
  13. 13

  14. django-extensions ./manage.py shell_plus ./manage.py dumpscript • • 14

  15. django-social-auth https://github.com/omab/django-social-auth Open Authentication login: Twitter, Facebook, Google... y muchos

    más La mejor alternativa. NO confundir con django-socialauth Muy configurable y customizable • • • • 15
  16. Plantilla <ul> <li><a href="{% url socialauth_begin 'facebook' %}">Facebook</a></li> <li><a href="{%

    url socialauth_begin 'twitter' %}">Twitter</a></li> <li><a href="{% url socialauth_begin 'google' %}">Google</a></li> </ul> 16
  17. django_compressor https://github.com/jezdez/django_compressor Django Compressor combina y comprime linked e inline

    Javascript o CSS en las plantillas de Django en ficheros estáticos cacheables. python manage.py compress • • • 17
  18. Plantilla {% load compress %} {% compress js %} <script

    src="/static/js/one.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8">obj.value = "value";</script> {% endcompress %} Renderiza: <script type="text/javascript" src="/static/CACHE/js/3f33b9146e12.js" charset="utf-8"></script> 18
  19. django-celery https://github.com/ask/django-celery Cola de tareas asíncronas Tiempo Real o planificada

    RabbitMQ / Redis • • • • 19
  20. django-sentry https://github.com/dcramer/django-sentry Agregador de logs en tiempo real Raven Servicio

    tecnológicamente agnóstico • • • 20
  21. 21

  22. django-uni-form https://github.com/pydanny/django-uni-form Layouts programáticos reutilizables construidos por componentes. La mejor

    forma de tener DRY forms en Django. • • • 22
  23. class MyForm(forms.Form): form_field_1 = forms.CharField(...) def __init__(self, *arg, **kwargs): self.helper

    = FormHelper() self.helper.form_action = 'submit-survey' self.helper.layout = Layout( Div( 'form_field_2', 'form_field_3', ) ButtonHolder( Submit('save', 'Save', css_class='button white') ) ) super(MyForm, self).__init__(*args, **kwargs) 23
  24. Plantilla {% load uni_form_tags %} {% uni_form my_form my_form.helper %}

    24
  25. django-floppyforms https://github.com/brutasse/django-floppyforms Remplaza los widgets de Django por HTML5 widgets.

    Widgets basados en plantillas. Añade widgets y algún campo nuevo. import floppyforms as forms • • • • • 25
  26. django-cache-machine https://github.com/jbalogh/django-cache-machine Cacheado/Invalidación autómatico de los modelos a través del

    ORM. Redefine el Django Memcached backend para cacheado infinito. Cuando un objeto cambia, es invalidado. Nuestros model managers deben heredar de CachingManager. • • • • • 26
  27. models.py from django.db import models import caching.base class Zomg(caching.base.CachingMixin, models.Model):

    val = models.IntegerField() objects = caching.base.CachingManager() 27
  28. django-secure https://github.com/carljm/django-secure Cumprueba nuestros settings para evitar que hagamos cosas

    estupidas. python manage.py checksecure Middleware configurable que nos ayuda a mejorar la seguridad de nuestro site. • • • • 28
  29. django-devserver https://github.com/dcramer/django-devserver Reemplazo plug and play del servidor de desarrollo

    de Django. Incluye módulos para el profiling de consultas SQL, vistas, uso de memoria, etc. python manage.py runserver • • • • 29
  30. django-dajax https://github.com/jorgebastida/django-dajax http://dajaxproject.com/ Forma fácil y potente de utilizar AJAX

    en nuestro proyectos sin escribir casi nada de código JS Soporta jQuery, Dojo, Prototype y motools • • • • 30
  31. views.py from dajax.core.Dajax import Dajax def assign_test(request): dajax = Dajax()

    dajax.assign('#block01 li', 'innerHTML', 'Something else...') return dajax.json() Plantilla <div onclick="Dajaxice.app.assign_test(Dajax.process);">Click Here!</div> 31
  32. Haystack https://github.com/toastdriven/django-haystack http://toastdriven.com/ La mejor forma de añadir un motor

    de búsqueda a Django Arquitectura similar a los modelos ORM, pero orientado a búsqueda. Soporte de varios motores: Solr, Xapian, Whoosh Escribiendo SearchIndex en search_indexes.py • • • • • • 32
  33. search_indexes.py class NoteIndex(SearchIndex): text = CharField(document=True, use_template=True) author = CharField(model_attr='user')

    pub_date = DateTimeField(model_attr='pub_date') def index_queryset(self): """Used when the entire index for model is updated.""" return Note.objects.filter(pub_date__lte=datetime.datetime.now()) site.register(Note, NoteIndex) 33
  34. Plantilla {{ object.title }} {{ object.user.get_full_name }} {{ object.body }}

    34
  35. django-reversion https://github.com/etianen/django-reversion Extensión que añade funcionalidad de control de versiones

    a los modelos Recuperar modelos borrados Histórico de datos con capacidad de retroceso en el tiempo API a bajo nivel • • • • • 35
  36. South https://bitbucket.org/andrewgodwin/south/overview http://south.aeracode.org/ Migraciones de bases de datos relacionales sin

    volverse loco, de forma semiautomática Interesante opción para trabajo en equipo • • • • 36
  37. South ./manage.py schemamigration my_app --initial ./manage.py migrate my_app ./manage.py migrate

    schemamigration my_app --auto ./manage.py migrate my_app Metadatos en: tabla south_migrationhistory y directorio migrations • • • • • 37
  38. django-registration https://github.com/nathanborror/django-registration Fork del proyecto. Django app con probablemente record

    de forks. Sistema de registro de usuarios customizable en la aplicación Usar versión 0.8.0 alpha • • • • 38
  39. django-tastypie https://github.com/toastdriven/django-tastypie Genera deliciosas APIs para proyectos de Django. Mi

    favorita para hacer interfaces RESTful HTTP Tremendamente potente: autenticación, autorización, serializado, customizado... • • • • 39
  40. my_app/api.py from tastypie.resources import ModelResource from myapp.models import Entry class

    EntryResource(ModelResource): class Meta: queryset = Entry.objects.all() 40
  41. urls.py from myapp.api import EntryResource entry_resource = EntryResource() urlpatterns =

    patterns('', (r'^api/', include(entry_resource.urls)), ) 41
  42. django-tastypie httli://127.0.0.1:8000/api/entry/?format=json httli://127.0.0.1:8000/api/entry/1/?format=json httli://127.0.0.1:8000/api/entry/schema/?format=json httli://127.0.0.1:8000/api/entry/set/1;3/?format=json • • • • 42