URL: https://linuxfr.org/news/publication-de-pyramid-1-5 Title: Publication de Pyramid 1.5 Authors: SigNix wilk, fero14041, BAud, palm123, Benoît Sibaud, gawel, Cyprien Le Pannérer, Nÿco, Bruno Michel, claudex, NeoX, tuiu pol, Nicolas Casanova et Ymage Date: 2014年04月12日T21:25:48+02:00 License: CC By-SA Tags: python et pyramid Score: 36 Sept mois après la sortie de la version alpha, la version 1.5 est disponible en version stable. _Pyramid_ est un _framework_ Python (Python2 et Python3) pour le développement de sites web, développé avec le projet _Pylons_ (qui regroupe justement des frameworks web), sous licence libre BSD. ![Pyramid](http://docs.pylonsproject.org/projects/pyramid/en/master/_static/pyramid-small.png) ---- [What's new in Pyramid 1.5](http://docs.pylonsproject.org/projects/pyramid/en/master/whatsnew-1.5.html) [Pyramid introduction](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/introduction.html) [Defending Pyramid's Design](http://docs.pylonsproject.org/projects/pyramid/en/latest/designdefense.html) [Pyramid Auth Is Hard, Let's Ride Bikes](http://www.youtube.com/watch?v=k20hBed8I9M) ---- #Petite introduction La particularité de ce framework est d'être « sans opinion » : il ne fournit pas d'[ORM](http://fr.wikipedia.org/wiki/Mapping_objet-relationnel) ni de template par défaut et il n'est pas indispensable d'utiliser toutes les possibilités offertes. On ne _« paye » que ce que l'on consomme_. Cela lui permet de répondre aux [petites applications se contentant d'un seul fichier](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/firstapp.html). Il est également extrêmement flexible ce qui lui permet de développer les projets les plus complexes sans avoir à changer de framework en cours de route. Par exemple, on peut commencer un projet sans contrôle d'accès puis lui rajouter un système d'authentification simple et, ensuite, un système plus complet [à base d'ACL](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/security.html) ou d'autres systèmes extérieurs agencés pour Pyramid. Pratiquement toutes les fonctionnalités de Pyramid sont extensibles, que ce soit le système de routes (classique `URL Dispatch` ou sur un arbre de ressources `Traversal`), les sessions (sur cookie signé ou à l'aide d'un système externe, beaker, redis...), les templates (éventuellement plusieurs en fonction des vues), les vues (sous forme de fonction ou classes), les contrôles d'accès, etc. Un mécanisme de souscription permet d'insérer ses propres fonctionnalités à tous les niveaux. Du lancement de l'application au parcours de la requête (création de la requête, rendu, création de la réponse, etc.). Il est même possible d'ajouter ses propres évènements, d'y souscrire et de les lancer. Il est également possible de développer une application par morceaux à inclure, chacun défini avec un préfixe éventuel donné par la configuration principale `config.include('package', route_prefix='/...')` . Préfixe qui sera automatiquement utilisé par `request.route_url('route_name')` Par exemple, il sera possible de développer la partie admin d'un site à part puis de l'intégrer dans `/admin` par la suite. Cette partie incluse pourra également être redéfinie sur trois aspects. La [redéfinition des vues]( http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/extending.html?highlight=override#overriding-views) pour en modifier le code, la [redéfinition des routes](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/extending.html?highlight=override#overriding-routes) pour diriger vers une autre vue et la [redéfinition des 'assets'](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/assets.html#overriding-assets-section) pour remplacer des données statiques et des templates. Tant et si bien que l'on peut utiliser Pyramid comme un jeu de mécano, pour construire son propre framework ou inversement passer d'un autre framework vers Pyramid. Sachant qu'il n'est absolument pas indispensable de connaître toutes ses possibilités pour se servir de Pyramid. La documentation couvre l'ensemble des fonctionnalités de manière exhaustive. En plus de cela, la raison de chaque choix technique est expliquée, ce qui en fait une documentation intéressante, à lire même pour ceux qui n'utilisent pas Pyramid. Dans le chapitre "Defending Pyramid's Design" une comparaison est faite avec les choix techniques des autres frameworks. #Les nouveautés ## Aucun moteur de template par defaut Aucun moteur de template n'est maintenant installé par défaut. Les dépendances précédentes à [Chameleon](http://chameleon.readthedocs.org/) et [Mako](http://makotemplates.org/) ne sont donc plus requises pour installer Pyramid. L'écosystème d'outils gagne alors deux nouveaux projets pour faire le lien avec chacun de ces moteurs: `pyramid_chameleon` et `pyramid_mako`, complétant le trio par `pyramid_jinja2` pour [Jinja2](http://jinja.pocoo.org/) -- qui leur préexiste depuis 2010. `pdistreport` est un script installé avec Pyramid qui fournit des informations sur la version de Python utilisée et les versions et emplacements des modules installés par `pip` ou `easy_install`. ## Un nouveau predicat : not_ Un nouveau prédicat permet, comme son nom l'indique, d'inverser la directive qu'il contient. Il peut être utilisé pour l'ajout d'une vue : add_view, add_route, add_subscriber, view_config et subscriber7 ```python from pyramid.config import not_ @view_config(route_name='myroute', request_method=not_('POST')) def view(request): ... ``` Ainsi, dans l'exemple ci-dessus, la vue `view` sera appelée sur toute requête HTTP autre que `POST`. ##Sessions ###Cookie de session signé `SignedCookieSessionFactory` remplace `UnencryptedCookieSessionFactoryConfig` (attention il y a incompatibilité sur les sessions en cours). ###Dépréciation de `Beaker` [Beaker](http://beaker.readthedocs.org/), le système de gestion de sessions et de cache, développé pour le framework `Pylons`, n'est plus recommandé pour gérer les sessions : on lui préférera `Redis`, via [pyramid_redis_sessions](https://pypi.python.org/pypi/pyramid_redis_sessions). Pour gérer le cache, on pourra lui substituer [dogpile.cache](https://bitbucket.org/zzzeek/dogpile.cache), développé par Mike Bayer (père de `SQLAlchemy` et `Mako`). ###pyramid_pluggable_session Pour remédier à l'obsolescence de Beaker, qui fait couler beaucoup d'encre sur la liste de discussion de Pyramid, un nouveau projet vient de naître : [pyramid_pluggable_session](https://github.com/usingnamespace/pyramid_pluggable_session), il permet d'ajouter facilement un système de persistance à l'aide d'un object `IPlugSession` comprenant deux méthodes `loads(session, request)` et `dumps(session, request, session_data)` . Un exemple de persistance en mémoire et sur fichier est déjà présent. ## Route externes Les routes peuvent maintenant référencer des routes externes. Ces routes sont implicitement statiques. Il est possible de ne pas spécifier le protocole (scheme) http ou https. Comme en Javascript, le protocole sera le même que celui de la requête. ```pycon>>> config = Configurator()>>> config.add_route('youtube', '//youtube.com/watch/{video_id}')>>> request.route_url('youtube', video_id='oHg5SJYRHA0') "https://youtube.com/watch/oHg5SJYRHA0" ``` Prise en charge de l'héritage dans la recherche des vues ## `request.exception` et `request.exc_info` ne sont plus effacés avant les `finished_callback` Ce bug a été corrigé, il permet maintenant de savoir lors d'un `finished_callback` si une exception a eu lieu ou pas. Exemple sur une transaction : ```python def _connect(request): conn = request.registry.dbsession() def cleanup(request): if request.exception is not None: conn.rollback() else: conn.commit() conn.close() request.add_finished_callback(cleanup) return conn @subscriber(NewRequest) def new_request(event): request = event.request request.set_property(_connect, 'db', reify=True) ``` ##Documentation La documentation du framework a toujours été à la fois un de ses atouts et un de ses défauts : extrêmement détaillée, elle a ravi les utilisateurs convaincus de l'outil, tout en faisant probablement fuir de nombreux débutants. L'équipe de développeurs en était bien consciente et avait lancé il y a plusieurs mois un appel aux dons pour la restructurer et la rendre plus accessible, mais le projet n'avait finalement pas démarré. L'idée a cependant été reprise récemment par Paul Everitt, qui a joint à la documentation existante deux nouveaux points d'entrée : un « [Quick Tour](http://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tour.html) » (visite rapide) du framework, et un « [Quick Tutorial](http://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html) » (bref tutoriel). ##Nouveau thème pour les projets créés par `scaffold` Une autre des caractéristiques de Pyramid est d'offrir un ensemble de "template" de projets pour en démarrer un, utilisé par la commande `pcreate` ([doc](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/project.html#project-narr)). Pour distinguer ces templates de ceux utilisés pour générer les réponses `HTTP`, la documentation les nomme "scaffolds". Pour cette version, les scaffolds fournissent, à la création d'un nouveau projet, un thème graphique entièrement retravaillé. ![Thème du scaffold "starter" de Pyramid 1.4](http://pix.toile-libre.org/upload/original/1398097413.png "Thème du scaffold 'starter' de Pyramid 1.4") ![Nouveau thème du scaffold "starter" de Pyramid 1.5](http://pix.toile-libre.org/upload/original/1398097441.png) ##En vrac * À l'occasion de cette sortie, l'artiste Felix Laflamme, graphiste attitré du projet, a créé un [nouveau T-shirt](http://pylonsproject.storenvy.com/collections/56570-all-products/products/283795-pyramid-hacker-t-shirt) qui fut très visible au Pycon. Vous pouvez retrouver les précédentes créations sur [la page de la boutique](http://pylonsproject.storenvy.com/collections/56570-all-products). * La bibliothèque `WSGI` bas niveau de gestion des requêtes et réponses HTTP sur laquelle s'appuie le framework, [WebOb](http://webob.org/), est maintenant requise à partir de sa version 1.3.1 (contre 1.2b3 pour Pyramid 1.4). Les changements sont trop nombreux pour tous les citer ici. Vous pouvez consulter les liens pour plus d'informations

AltStyle によって変換されたページ (->オリジナル) /