English
I posted a mail on django-developper mailling about this subject, there is also wiki page on djangoproject and a githubPreface
TL;DR: My life is wonderful.
Ce n'est pas sans enthousiasme que je me propulse du lit pour vous écrire ses quelques lignes. J'ai été calme après mes déboires avec Printemps, il faillait que je me repose avec des cascades dans le métro parisien, des verres et des vers, de la musique qui fait mal à la tête, la découverte du fabuleux jeu Skyrim, la dernière version de Diablo III qui rend le jeu du jeu moins relou au niveau max mais seulement à l'acte II, lire je meurt uniquement toutes les 30minutes au lieu des 10-15min habituelles, quelques headshots à Team Fortress 2 et Windows 8, une fonction récursive terminal de plus de cinquantaine lignes sans les commentaires (je n'avais pas écrit de fonction récursive depuis un long moment, la dernière dont je me rappelle date du deuxième cours d'algorithmie...), une présentation sur les graphdb & Python et une graphdb en Python, du shopping, une nouvelle coupe et peut être que vous avez aussi zappé django-socketio-alt et hivi.mx (forge) qui sera bien sur dans la prochaine itération d'hypermove.net (donc enfin une application originale dans cet amas de lieux communs) et quelques CV envoyés, je n'ai terminé aucuns projets mais je me suis retrouvé sur la ML de django-dev et un sujet de brainstorming sur une partie que j'affectionne particulièrement tellement je ne l'aime pas l'admin!
Django Admin (framework)
TL;DR: Django Admin is good and powerful but we do/try to do too much with it.
L'admin Django est sans conteste la fonctionnalité du framework Django la plus populaire et la plus appréciée mais aussi peut être la plus détesté tellement on essaye de lui faire faire tout est n'importe quoi. Le principe est génial et en plein dans le viseur d'une des règles d'or de l'informaticien «Moins j'en fait, mieux je me porte» ainsi que «ça juste marche». En gros avec 5 lignes de codes, il est possible d'avoir une interface web fonctionnelle pour faire de l'édition en base de donnée. Loin, très loin, de toute ce que vous pourriez faire avec n'importe quelles autres moteur de site web en Python ou autre, Access compris. Sauf peut être SPIP qui, la dernière fois que j'ai essayé, ne supportais pas les modèles personnalisés. Les wikis ne comptent pas. Mais il faut dire ce qui est, c'est vieux, moche et pas du tout pratique pour des workflows particuliers mais peut être très efficace notamment pour tout ce qui concerne la publication. C'est un des sujets préférés des Djangonautes. Comme je l'ai dit c'est très pratique. Le problème c'est justement c'est tellement facile (au début) qu'on commence évidemment par ça. La chose que je reproche le plus à l'admin c'est d'avoir à connaître un certains nombres de point d'entrée dans les classes de configurations rien que pour pouvoir avoir quelque chose qui ne pique pas trop les yeux. Je connais le Python mais je connais aussi l'HTML et le CSS, ceci dit une fois l'API maîtriser c'est vrai que c'est un peu plus agréable que faire du HTML et du CSS assez répétitif.
Une fois l'édition des modèles en place, le client habitué à l'interface, on ajoute une ou deux fonctions pas conventionnelles, on passe par du monkey-patching, du duck-typing, on meta-classe par ci par là sans compter les surcharges de template en pagaille, pleins de hacks à faire, bref pleins de bidouilles sympas, on finit parfois par forker, vous imaginez bien que ça peut finir mal.
Le problème principale de l'admin c'est son manque de flexibilité et d'extensibilité.
Here comes composite
TL;DR: Django-Composite is designed to make it possible to create a cms like PHP-Nuke which makes a good candidate as the base framework for the Django Admin, plus it will bring more reusable components to Django ecosystem.
Comment peut on rendre l'admin plus flexible ? C'est simple en ajoutant une couche d'abstraction au dessus des CBV qui permettent la création de page web à partir du Python de façon simple tout en étant puissant. Il est ensuite possible grâce à ce système de mettre en place tout type de site, notamment un site d'administration auto-généré, configurable et extensible. Je le dis doucement (ou pas) car c'est pas encore fait, peut être que je (nous?) vais (allons) croisé des monstres hideux (sûrement) insurmontable (peu probable, on fait du Python quand même).
A quoi ressemble cette couche d'abstraction ? L'idée a fait sont bout de chemin en plusieurs étapes en premier lieu il y a PHP-Nuke et son incroyable talent pour rendre la réalisation de site très simple à l'aide des innombrables plug-ins. Ensuite il y a mon imagination débordante et cela à donner Django-Composite.
Kesako Django Composite
TL;DR: Django Composite is pluggable, extensible, based on Twitter Bootstrap: perfect for the next Admin.
Dans l'état actuel du design il y a trois éléments dans Django Composite:
- Les «Widgets» sont des classes Python associé à un template, du css et du javascript et du code Python. Il est possible de les composer pour créer des widgets plus complexes. Un widget peut contenir un ou plusieurs widgets. Ils sont construit sur le modèle de la CBV TemplateView. Tout widget peut contenir un formulaire ou plusieurs si il s'agit d'un widget composé d'autre widget. L'idée c'est de garder chaque widget simple pour maximiser sa simplicité et sa réutilisable Les widgets sont autonomes ils peuvent être ajoutés à une «Page», que nous allons voir la suite, tel quel et seront contacté par la «Page» pour analyser toutes les requêtes entrantes qui ne sont pas des «GET», pour les «GET» le widget est simplement rendu et inclus dans la page avec toutes ses dépendances L'objectif est de créer des widgets prêt à l'emploi, dans un premier temps les widgets fournis par le framwork Bootstrap de Twitter.
- Les «Pages» sont un ensemble de widgets, css, javascript et code Python qui permettent de faire le rendu d'une page et le traitement des requêtes. Elles sont construites sur la base de la CBV TemplateView. Il existe déjà trois pages inclus dans Django-Composite basé sur le framwork Bootstrap de Twitter pour accélérer le développement de page «OneColumn», «TwoColumns» et «HolyGrail»
- Les «Subs» pour «SubApplication» sont des regroupement de «Pages» qu'on attache au routeur d'url Django et qui se chargent d'enregistrer toutes les pages qu'ils contiennent et plus si affinité. Leur objectif est d'offrir un cadre pour la création de fonctionnalités modulaires et réutilisables qui contiennent plusieurs pages et/ou ressources comme une page de login viens toujours accompagné d'une page de récupération de mot de passe en principe, un moteur de recherche supporté par de l'AJAX a besoin d'au moins deux pages: une page pour afficher le formulaire et un service pour récupérer les résultats.
Et il me semble que c'est tout. Tout ce qui est décrit ici n'est pas encore dans le dépot mais cela ne saurait tarder.
Je pense que Django-Composite offre l'infrastructure nécessaire capable à la fois de reproduire les fonctionnalités actuel de l'admin, de fournir des patrons clairs pour l'étendre mais aussi offre un cadre sympa pour la création de fonctionnalités intégrables facilement dans un site existant sans perdre la puissance de Python/Django et étant plus flexible aux niveaux des fonctions que l'on souhaite intégrer dans un site.
What's next ?
TL;DR: Call for contribution and master plan (forge)
Mais qu'est ce que je fais là mise à part fanfaronner sur une application qui est à peine débuter et comme objectif de remplacer le vénérable admin Django?! Un appel à contribution bien sur! Il y a beaucoup à faire dans le projet principale qui est de remplacer l'admin Django, mais aussi pour en faire aussi un outil qui puissent permettre la création de CMS et un CMS showcase ou ultime ;)
Si vous êtes débutant en Django, pas besoin de connaître l'admin, un niveau correct en Python est suffisant, c'est l'occasion de vous confronter à un autre type de code et qui peut potentiellement est très utile à la communauté entière!
Le master plan est le suivant, découpé pour chacune des applications cités ci-dessus:
Django-Composite
- Créer les «Sub»
- Créer d'autres «Page» de base avec Twitter Bootstrap
- Créer des pages pour supporter Foundation
- Créer des widgets Bootstrap
- Créer des widgets pour d'autre bibliothèques javascript qu'il n'est pas possible de supporter avec les form widgets de Django, je pense aux sliders, cabrioles et autres
- Créer des «Subs» ou créer des «Subs» pour une application Django existante
Django-Composite-Admin
- Porter l'admin Django à composite
- Créer un dashboard configurable
- Créer des widgets utiles pour l'admin
Django-Composite-CMS
- Créer le projet de base avec un runner
- Créer un site pour le CMS avec un service qui référence et permet l'installation à partir d'une instance du CMS d'installer des plugins
- Créer des applications ou porter des applications pour qu'elles s'intègre correctement
Je crois que c'est suffisant pour le moment. Cela tombe un peu mal avec les fêtes de fin d'année mais qui ne tente rien n'a rien!
Happy Hacking!

Aucun commentaire:
Enregistrer un commentaire