{"id":242,"date":"2009-11-29T21:09:38","date_gmt":"2009-11-29T20:09:38","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=242"},"modified":"2009-11-30T16:17:55","modified_gmt":"2009-11-30T15:17:55","slug":"django-roa-ou-mince-je-trouve-pas-de-jeux-de-mots-la","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2009\/11\/29\/django-roa-ou-mince-je-trouve-pas-de-jeux-de-mots-la\/","title":{"rendered":"Django-ROA ou&#8230; Mince je trouve pas de jeux de mots l\u00e0"},"content":{"rendered":"<p>\u00c7a sera bien la premi\u00e8re fois que je ne fais pas de jeux de mots dans le titre d&#8217;un billet la Django-app du mois. Mais l\u00e0, je n&#8217;ai vraiment pas d&#8217;inspiration et comme je suis sur un timing plut\u00f4t serr\u00e9 (le billet devant \u00eatre publi\u00e9 d&#8217;ici au plus tard 4h20 pour pouvoir pr\u00e9tendre \u00e0 \u00eatre un billet de novembre), je ne vais pas trop attendre qu&#8217;elle n&#8217;arrive. Je me rattraperai le mois prochain (je pense parler de piston le mois prochain, tout un po\u00e8me&#8230;).<\/p>\n<p><a href=\"http:\/\/code.welldev.org\/django-roa\/\">Django-ROA<\/a> donc, cette jolie app est d\u00e9velopp\u00e9e par <a href=\"http:\/\/www.biologeek.com\/\">David Larlet<\/a> que j&#8217;ai d\u00e9j\u00e0 cit\u00e9 dans mes pr\u00e9c\u00e9dents billets. Il permet de g\u00e9rer des ressources distantes normalement accessibles en REST, en passant \u00e0 travers l&#8217;ORM de django (et donc les mod\u00e8les Django).<\/p>\n<p>Et oui, \u00e7a permet, d&#8217;une fa\u00e7on plus que facile de faire comme si des mod\u00e8les distants \u00e9taient des mod\u00e8les locaux.<\/p>\n<p>Le petit sch\u00e9ma suivant (que j&#8217;ai tr\u00e8s vilainement r\u00e9cup\u00e9r\u00e9 du site de David, sur le <a href=\"http:\/\/www.biologeek.com\/django,python,web-semantique\/django-roa-pour-une-architecture-orientee-ressources\/\">billet parlant de Django-ROA<\/a>) explique tout, bien mieux que ne le ferraient mille de mes mots.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-243\" title=\"django-roa-diagram-petit\" src=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2009\/11\/django-roa-diagram-petit.png\" alt=\"django-roa-diagram-petit\" width=\"596\" height=\"328\" srcset=\"https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2009\/11\/django-roa-diagram-petit.png 596w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2009\/11\/django-roa-diagram-petit-300x165.png 300w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/p>\n<p>Bien entendu, on est pas oblig\u00e9 de se limiter \u00e0 faire communiquer notre Django \u00e0 un autre Django distant. On peut se connecter \u00e0 tout ce qui a une interface HTTP. Op timeline de Twitter, Op n&#8217;importe quelle BD discutant le HTTP\u2026<\/p>\n<p>Je vois \u00e0 vos sourires b\u00e9ats que vous \u00eates en train de comprendre combien Django-ROA peut \u00eatre utile. Et vous avez raison.<\/p>\n<h1>1- O\u00f9 on le trouve, comment on l\u2019installe, tout \u00e7a quoi ?<\/h1>\n<p>Alors on le trouve sur la page bitbucket qui lui est consacr\u00e9. Pour l&#8217;installation, il y a deux possibilit\u00e9s :<\/p>\n<ul>\n<li>soit avec hg et op on r\u00e9cup\u00e8re la derni\u00e8re version des sources<\/li>\n<li>soit avec easy_install<\/li>\n<\/ul>\n<p>Attention toutefois, le package easy_install contient une version du trunk Django 1.2. Si vous ne voulez pas l&#8217;utiliser, il faudra penser \u00e0 supprimer le r\u00e9pertoire en question.<\/p>\n<p>Dans les deux cas Django-roa vient avec une version de restkit et une version de Django-piston. Si vous avez d\u00e9j\u00e0 ces deux librairies l\u00e0, l\u00e0 aussi il faudra penser \u00e0 faire le nettoyage.<\/p>\n<p>Enfin, c&#8217;est important, si vous \u00eates en Django &lt; trunk, il vous faudra patcher votre Django pour pouvoir utiliser les many to many en distant. Si vous \u00eates en Django SVN, il vous faudra attendre que David ait rendu Django-ROA compatible Django 1.2 (c&#8217;est peut-\u00eatre d\u00e9j\u00e0 le cas d&#8217;ailleurs).<\/p>\n<h1>2- Niveau documentation<\/h1>\n<p>Il y a le <a href=\"http:\/\/code.welldev.org\/django-roa\/wiki\/Home\">wiki<\/a> du bitbucket ainsi que l&#8217;article du blog de David dont j&#8217;ai d\u00e9j\u00e0 donn\u00e9 le lien (mais je le <a href=\"http:\/\/www.biologeek.com\/django,python,web-semantique\/django-roa-pour-une-architecture-orientee-ressources\/\">redonne<\/a> pour les \u00e9tourdis). Il y a \u00e9galement le code source des tests, qui permet de bien comprendre comment tout fonctionne. Et je vous recommande vraiment de lire le code des tests si vous voulez comprendre.<\/p>\n<h1>3- Qu&#8217;est-ce qu&#8217;on fait et comment on le fait ?<\/h1>\n<p>Qu&#8217;est-ce qu&#8217;on fait, je vous l&#8217;ai d\u00e9j\u00e0 dit. Faut suivre un peu. On connecte notre Django \u00e0 notre Django (ou d&#8217;autre base distante, voir l&#8217;exemple avec Twitter). Mais ce qu&#8217;il faut savoir c&#8217;est que Django-ROA permet de g\u00e9rer la partie serveur et la partie client, dans le cas o\u00f9 vous d\u00e9veloppez vous m\u00eame la partie &#8216;Django distante&#8217;.<\/p>\n<p>Maintenant Django-ROA est encore en dev, et il peut \u00eatre utile de conna\u00eetre quelques petits tuyaux, que bien entendu, je vais vous donner.<\/p>\n<h1>4- Les tuyaux de Jmad&#8230;<\/h1>\n<h2>4.1- Erreur 500 c\u00f4t\u00e9 serveur<\/h2>\n<p>Sur la partie serveur, il se peut que vous vous trouviez avec des erreurs 500 assez silencieuses. C&#8217;est moi ce que j&#8217;ai eu. Il se trouve que c&#8217;est d\u00fb au logging.debug et \u00e0 un probl\u00e8me (allez savoir pourquoi) d&#8217;encodage UTF-8. Enlevez les logging et tout roule. Je n&#8217;ai pas eu le temps de chercher et faire remonter \u00e0 David le pourquoi du comment de ce probl\u00e8me, mais comme je me suis creus\u00e9 la t\u00eate quelques temps avant de trouver le probl\u00e8me, je pr\u00e9f\u00e8re vous informer.<\/p>\n<h2>4.2- S\u00e9rialisation&#8230;<\/h2>\n<p>Par d\u00e9faut, on peut s\u00e9rialiser les objets de trois fa\u00e7ons :<\/p>\n<ul>\n<li>en JSON,<\/li>\n<li>en XML,<\/li>\n<li>en utilisant le s\u00e9rialiseur fait par David pour les tests qui est un s\u00e9rialiseur XML un peu modifi\u00e9.<\/li>\n<\/ul>\n<p>Allez savoir pourquoi, mais pour moi, seul le troisi\u00e8me daignait fonctionner.<\/p>\n<h2>4.3- Authentification<\/h2>\n<p>Pour l&#8217;instant l&#8217;authentification sur les services distants n&#8217;est pas g\u00e9r\u00e9e. Si vous en avez absolument besoin, n&#8217;h\u00e9sitez pas \u00e0 envoyer un mail \u00e0 David.<\/p>\n<h1>5- Conclusion<\/h1>\n<p>Django-ROA est encore un module en dev, il manque quelques fonctionnalit\u00e9s qui pourraient le faire passer du statut d&#8217;app int\u00e9ressante et utile \u00e0 celui d&#8217;app compl\u00e9tement indispensable. Mais il est d&#8217;ors est d\u00e9j\u00e0 bien utile, quand des probl\u00e9matiques de communication entre bases distantes se mettent \u00e0 appara\u00eetre.<\/p>\n<p>Il me semble juste que l&#8217;on devrait changer son nom, pour par exemple Django-CROA. \u00c7a m&#8217;aurait permis d&#8217;avoir un bien meilleur titre du genre Django-CROA et le crapaud est en toi, ou alors Django-CROA , l&#8217;app qui voulait devenir aussi grosse qu&#8217;un b\u0153uf&#8230;) enfin, tant pis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c7a sera bien la premi\u00e8re fois que je ne fais pas de jeux de mots dans le titre d&#8217;un billet la Django-app du mois. Mais l\u00e0, je n&#8217;ai vraiment pas d&#8217;inspiration et comme je suis sur un timing plut\u00f4t serr\u00e9 (le billet devant \u00eatre publi\u00e9 d&#8217;ici au plus tard 4h20 pour pouvoir pr\u00e9tendre \u00e0 \u00eatre &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2009\/11\/29\/django-roa-ou-mince-je-trouve-pas-de-jeux-de-mots-la\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Django-ROA ou&#8230; Mince je trouve pas de jeux de mots l\u00e0<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[35],"tags":[99,98,42],"class_list":["post-242","post","type-post","status-publish","format-standard","hentry","category-la-django-app-du-mois","tag-django","tag-python","tag-rest"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-3U","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=242"}],"version-history":[{"count":3,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/242\/revisions"}],"predecessor-version":[{"id":245,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/242\/revisions\/245"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}