Développer une application tierce Django ======================================== Pytong, Toulon 22 Juin 2013 - Lightning Talk Samuel Goldszmidt ([@ouhouhsami](https://twitter.com/ouhouhsami)), Ircam --- Le besoin --------- > Avant de *développer* : *concevoir*, et encore avant : *exprimer le besoin* > " *Intuitif* " n'est pas un besoin accepté par les maisons sérieuses Un **champ d'auto-complétion** autorisant un ou plusieurs choix : * Performant pour des grands nombres de données * Accessible (mobiles, postes fixes) * Branché sur l'écosystème Django (notre environnement technique de départ) : * Utilisant Django (si besoin les [paquets de contrib](https://docs.djangoproject.com/en/dev/ref/contrib/), intégrable dans l'admin) et des applications tierces solides/reconnues * Respect des bonnes pratiques (Django et Python, organisation du code, doc, tests) --- L'existant ---------- Les *alternatives* déjà existantes : * [django-autocomplete-light](http://django-autocomplete-light.readthedocs.org/en/latest/) (anciennement [django-autocomplete](http://code.google.com/p/django-autocomplete/)) * [django-select2](http://django-select2.readthedocs.org/en/latest/) * [django-ajax-selects](https://github.com/crucialfelix/django-ajax-selects/) * [quelques autres ici](https://www.djangopackages.com/grids/g/auto-complete/) > " Pour des choix éclairés, je consulte [djangopackages](https://www.djangopackages.com) " En terme d'*ergonomie fonctionnelle* : * la librairie Javascript [Select2](http://ivaynberg.github.io/select2/) convenait * son intégration à Django existait déjà : [django-select2](http://django-select2.readthedocs.org/en/latest/) ... mais son usage s'est relevé difficile. --- Les "erreurs" ------------- Quelques retours d'expérience sur le code source * django-select2 : * très monolithique (notamment la gestion de la configuration Javascript, repassant par Python) * [beaucoup de classes](http://django-select2.readthedocs.org/en/latest/ref_widgets.html) * configuration/paramétrage des "fournisseurs de contenu" complexe * Select2 : * non testé * API pas très stabilisée > " Untested code is broken code " --- Les besoins de l'implémentation ------------------------------- Pour réaliser une fonctionnalité d'auto-complétion, il faut : * Côté Javascript : 1. Faire une requête AJAX avec 1 à n paramètres 2. Récupérer un json simple ```[(id, label), ...]``` de données qui permettraient de remplir les ```