{"id":142,"date":"2009-08-21T14:53:14","date_gmt":"2009-08-21T12:53:14","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=142"},"modified":"2009-10-04T22:00:53","modified_gmt":"2009-10-04T20:00:53","slug":"django-extensions-le-couteau-suisse-du-djangonaute","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2009\/08\/21\/django-extensions-le-couteau-suisse-du-djangonaute\/","title":{"rendered":"Django Extensions, le couteau suisse du djangonaute."},"content":{"rendered":"<p>Une nouvelle cat\u00e9gorie appara\u00eet (oui je sais, encore une alors que certaines restent d\u00e9sesp\u00e9r\u00e9ment vide, mais gr\u00e2ce \u00e0 la magie de wordpress, vous ne le savez pas, vu que les cat\u00e9gories vides n&#8217;apparaissent pas&#8230; ), la Django App du mois. Tout est dit dans le nom, tout les mois, en fin de mois, je posterais un petit billet sur une django app que j&#8217;aurais test\u00e9 pendant le mois. Enfin, \u00e7a c&#8217;est le principe, est ce que je vais tout les mois avoir le temps de chercher\/choisir\/tester une django app.. \u00c7a, rien n&#8217;est moins sur. (d&#8217;ailleurs j&#8217;en profite, si vous avez des id\u00e9es de django app, les commentaires sont l\u00e0 pour \u00e7a).<\/p>\n<p>Pour ce premier num\u00e9ro, la django App qui a la chance d&#8217;\u00eatre la django App d&#8217;ao\u00fbt est Django Extensions. (tiens, je viens d&#8217;avoir une id\u00e9e, un calendrier des DjangoApp, que les djangonautes, ou les routier, pourraient accrocher dans leur bureau ou leur camion).<\/p>\n<h1>1- A quoi elle sert ?<\/h1>\n<p>Django Extensions est une application d&#8217;aide au d\u00e9veloppement. Elle rajoute plein de commande au manage.py, commandes tellement indispensable qu&#8217;on se demande comment l&#8217;on avait pu faire sans.<\/p>\n<p>Elle rajoute aussi quelques Database Model Fiels et\u00a0 Database Model. Et comme si cela ne suffisait pas on gagne aussi, pour le m\u00eame prix, une extension pour la gestion des ForeignKey du cot\u00e9 admin.<\/p>\n<h1>2- Et plus en d\u00e9tail ?<\/h1>\n<h2>2.1 Les commandes en plus<\/h2>\n<p>Je vais me limiter \u00e0 d\u00e9crire quelqu&#8217;une des commandes que vous pourrez utiliser avec Django Extensions, celles que moi, j&#8217;utilise le plus souvent.<\/p>\n<ul>\n<li>\n<h3>generate_secret_key<\/h3>\n<\/li>\n<\/ul>\n<p>elle permet de g\u00e9n\u00e9rer une secret key pour son projet. Ca a l&#8217;air tout con et inutile, mais en fait non. Quand on utilise un gestionnaire de source pour d\u00e9ployer rapido son projet et que donc on ne passe pas par la commande de cr\u00e9ation de projet, et ben en fait c&#8217;est super utile.<\/p>\n<ul>\n<li>\n<h3>create_app<\/h3>\n<\/li>\n<\/ul>\n<p>rien de plus que la commande de base sauf que l&#8217;on peut donner en plus un r\u00e9pertoire de template \u00e0 utiliser<\/p>\n<ul>\n<li>\n<h3>reset_db<\/h3>\n<\/li>\n<\/ul>\n<p>qui n&#8217;a pas eu besoin de reset 42 fois par jour sa bd ? Et passer soit par le client ligne de commande soit par les interface web d&#8217;admin, \u00e7a devient rapidement tr\u00e8s chiant. Pour tout ces djangonautes l\u00e0 (dont je fais parti) reset_db c&#8217;est le paradis.<\/p>\n<ul>\n<li>\n<h3>runscript<\/h3>\n<\/li>\n<\/ul>\n<p>lance un script dans l&#8217;environnement django.<\/p>\n<ul>\n<li>\n<h3>runserver_plus<\/h3>\n<\/li>\n<\/ul>\n<p>l&#8217;une des (si ce n&#8217;est pas la) commandes la plus utile de toute l&#8217;extension. Elle n\u00e9cessite d&#8217;avoir Werkzeug install\u00e9 (mais un petit easy_install et c&#8217;est bon). Et elle permet ensuite de lancer le serveur de dev avec le debugguer de Werkzeug. Et l\u00e0, c&#8217;est le pied. A chaque exception re\u00e7u, on se retrouve avec une vrai interface de debugger dans notre page web. On peut ouvrir des consoles interractive un peu partout (\u00e0 tout les pas d&#8217;appel de fonction), on peut voir l&#8217;\u00e9tat courant des variables, le code de chaque fonctions trac\u00e9es ). C&#8217;est juste ultime.<\/p>\n<ul>\n<li>\n<h3>shell_plus<\/h3>\n<\/li>\n<\/ul>\n<p>celle l\u00e0 aussi est une commande indispensable. Elle vous permet de lancer un shell qui a d\u00e9j\u00e0 import\u00e9 tout vos models. Lorsqu&#8217;on utilise comme moi, assez souvent le shell pour faire quelques petits tests, v\u00e9rifications, on se rend vite compte du gain de temps.<\/p>\n<ul>\n<li>\n<h3>dumpscript<\/h3>\n<\/li>\n<\/ul>\n<p>qui permet de g\u00e9n\u00e9rer un script python \u00e0 partir des donn\u00e9es contenu dans une base de donn\u00e9e \u00e0 un instant t. dumpscrit fonctionne pour toute une app ou juste un model d&#8217;app.<\/p>\n<h2>2.2 Le syst\u00e8me de job<\/h2>\n<p>Django Extensions rajoute un m\u00e9canisme complet de job. Un job est une classe python qui d\u00e9rive de BaseJob et qui impl\u00e9mente la fonction execute (self).<\/p>\n<p>Les jobs se d\u00e9finissent par app django. Pour mettre en place le syst\u00e8me de jobs pour une app, il suffira d&#8217;utiliser la commande create_jobs en lui donnant le nom de l&#8217;app en question. Django Extensions cr\u00e9era alors l&#8217;architecture de r\u00e9pertoire qui va bien.<\/p>\n<p>Une fois que l&#8217;on a cr\u00e9\u00e9 ses jobs, on peut les configurer pour qu&#8217;ils soient execut\u00e9s toutes les heures, les jours, les semaines, les mois. On peut aussi demander l&#8217;ex\u00e9cution d&#8217;un ou de plusieurs jobs en commande manage.py.<\/p>\n<h1>3- Comment on l&#8217;installe, o\u00f9 on le trouve ?<\/h1>\n<p>Django extensions \u00e9tant host\u00e9 par google code, il suffit d&#8217;aller sur son espace google code se trouvant l\u00e0<a href=\"http:\/\/code.google.com\/p\/django-command-extensions\/\"> http:\/\/code.google.com\/p\/django-command-extensions\/<\/a><\/p>\n<p>Pour l&#8217;installation deux possibilit\u00e9s :<\/p>\n<ul>\n<li>t\u00e9l\u00e9charger la derniere versions sur le site web puis faire un simple python setup.py install<\/li>\n<li>lancer un easy_sintall<\/li>\n<\/ul>\n<p>ensuite, il vous suffira, pour chaque projet dans lequel vous voulez l&#8217;utiliser, d&#8217;ajouter django_extensions dans votre INSTALLED_APPS .<\/p>\n<p>Et c&#8217;est tout.<\/p>\n<h1>4- Et la doc ?<\/h1>\n<p>Vous en trouverez sur le google code. Plut\u00f4t compl\u00e8te et claire. Il y a m\u00eame un lien vers un screencast.<\/p>\n<h1>5- En conclusion<\/h1>\n<p>Une application \u00e0 utiliser, sans aucune mod\u00e9ration et qui fait vraiment gagner \u00e9norm\u00e9ment de temps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une nouvelle cat\u00e9gorie appara\u00eet (oui je sais, encore une alors que certaines restent d\u00e9sesp\u00e9r\u00e9ment vide, mais gr\u00e2ce \u00e0 la magie de wordpress, vous ne le savez pas, vu que les cat\u00e9gories vides n&#8217;apparaissent pas&#8230; ), la Django App du mois. Tout est dit dans le nom, tout les mois, en fin de mois, je posterais &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2009\/08\/21\/django-extensions-le-couteau-suisse-du-djangonaute\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Django Extensions, le couteau suisse du djangonaute.<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_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},"jetpack_post_was_ever_published":false},"categories":[35],"tags":[99,98],"class_list":["post-142","post","type-post","status-publish","format-standard","hentry","category-la-django-app-du-mois","tag-django","tag-python"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-2i","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/142","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=142"}],"version-history":[{"count":4,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":144,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions\/144"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}