Sam & Max: Python, Django, Git et du cul » http http://sametmax.com Deux développeurs en vadrouille qui se sortent les doigts du code Wed, 05 Feb 2014 14:20:37 +0000 en hourly 1 http://wordpress.org/?v=3.3.1 Django, une app à la fois : GET, POST et COOKIES http://sametmax.com/django-une-app-a-la-fois-get-post-et-cookies/ http://sametmax.com/django-une-app-a-la-fois-get-post-et-cookies/#comments Thu, 08 Aug 2013 10:31:26 +0000 Sam http://sametmax.com/?p=7047 Django, une app à la fois, qui démontre comment récupérer les valeurs passées en GET, POST et cookies. Avec en prime comment setter la valeur d'un cookie.]]> Nouvel ajout au projet Django, une app à la fois, qui démontre comment récupérer les valeurs passées en GET, POST et cookies. Avec en prime comment setter la valeur d’un cookie.

Pour une fois, ça n’a pas été trop long. En même temps il n’y avait qu’une vue à faire.

Chopez les sources pendant que c’est encore chaud.

P.S: les corrections (bug, orthographe, esthétique…) sont toujours les bienvenues, même si c’est quelque chose de tout petit, sur la version anglaise comme la version française. N’hésitez pas à faire un Pull Request sur Github.

flattr this!

]]>
http://sametmax.com/django-une-app-a-la-fois-get-post-et-cookies/feed/ 1
Pourquoi git clone me donne un résultat différent en HTTP et en SSH ? http://sametmax.com/pourquoi-git-clone-me-donne-un-resultat-different-en-http-et-en-ssh/ http://sametmax.com/pourquoi-git-clone-me-donne-un-resultat-different-en-http-et-en-ssh/#comments Fri, 24 Aug 2012 14:27:15 +0000 Sam http://sametmax.com/?p=1872 Il clone depuis SSH et possède la dernière version.

Je clone depuis HTTP et j’ai une version d’il y a une mois.

La raison: Git doit générer des fichiers spéciaux pour que le pull via HTTP soit à jour.

Sur le serveur, un petit:

git update-server-info

Et on est reparti comme en 40. Et pour pérenniser ça, un petit hook Git. Ca tombe bien, il est tout fait:

mv .git/hooks/post-update.sample .git/hooks/post-update

flattr this!

]]>
http://sametmax.com/pourquoi-git-clone-me-donne-un-resultat-different-en-http-et-en-ssh/feed/ 0
Schéma de fonctionnement général de Django http://sametmax.com/schema-de-fonctionnement-general-de-django/ http://sametmax.com/schema-de-fonctionnement-general-de-django/#comments Thu, 21 Jun 2012 21:04:42 +0000 Sam http://sametmax.com/?p=964 Les frameworks Web rendent ceux qui les maitrisent très productifs, mais pour débuter, quelle galère ! On a envie de retourner à ses vieux scripts tout pourris mais bien plus facile à comprendre. Et c’est normal, on est pas la pour se toucher devant la qualité du code, mais pour obtenir un truc qu marche (dédicace à Max).

Voici une explication du fonctionnement global de Django. Comme ça la prochaine fois que vous lisez un tuto Django et qu’on demande d’insérer un blougou à sens giratoire inversé dans le convecteur temporel, vous ne saurez toujours pas de quoi on parle, mais vous saurez où ça se trouve.

Le protocole HTTP

Pour comprendre ce que fait Django, il faut piger le fonctionnement du Web. Si vous savez ce qu’est une requête POST et que la notion de headers et de cookies ne vous parait pas complètement glucose, vous pouvez sauter cette partie. Les autres, n’ayez pas honte, il y a des centaines de dev Web là dehors ne savent pas comment ça marche.

En résumé, se balader sur le Web, c’est comme aller au resto. On est un client, on demande quelque chose au serveur, le serveur va voir en cuisine, et revient avec la bouffe, ou une explication sur l’absence de la bouffe (mais jamais pourquoi la bouffe est dégueulasse, allez comprendre):

Schéma du protocole HTTP, en gros

Le protocole HTTP, en (très) gros

Ce cycle requête/réponse se déroule des centaines de fois quand on parcours un site Web. Chaque lien cliqué déclenche une requête GET, et la page suivante ne s’affiche que parcequ’on a reçu la réponse contenant le HTML de celle-ci. Les formulaires, les requêtes AJAX, la mise à jour de vos Tweets sur votre téléphone, tout ça fonctionne sur le même principe.

Django dans tout ce merdier

Django est un framework Web, le serveur lui fait passer chaque requête GET, POST (ou autres) envoyée par les clients. Django, lui, génère un contenu pour chacune d’elle (souvent du HTML), et le refile au serveur qui renvoit la réponse au client. En détail, ça donne ça:

Schéma du cycle de vie d'une requête traitée par Django

Le cycle de vie d'une requête traitée par Django

Django ce n’est que ça. Il n’y a rien de mystérieux: la requête arrive, on prend un template, on dit à Django de mettre des données récupérées depuis la base de données dans le template, on génére du HTML, on retourne la réponse. Le reste (le gros reste), ce sont juste des outils pour automatiser toutes les variantes de ce cycle: formulaire, flux RSS, gestion de droits, etc. Mais tout tourne TOUJOURS autour de la logique requête/réponse car le but est de faire du Web, et que le Web marche comme cela.

Vocabulaire

La difficulté de Django vient aussi du vocabulaire car on utilise des mots compliqués pour désigner des trucs simples.

Urlresolvers: la partie de Django qui reçoit la requête, la compare à une route dans urls.py, et appelle la bonne vue de views.py
Template processor: la partie de Django qui permet de récupérer un template par son nom, de lui passer des données, et de récupérer du HTML sans se fouler. On l’utilise rarement directement, généralement on passe plutôt par une fonction raccourcie comme render().
Template Context: un simple dictionnaire dont les clés sont les noms des variables qu’on veut rendre disponibles dans un template, et les valeurs sont les valeurs de ces variables. On créé ce dictionnaire dans un vue, et on le passe au template processor pour obtenir du HTML à partir d’un template.
Tags et filters: des fonctions Python castrées pour pouvoir être utilisées dans un template (puisque le template est là pour limiter l’usage de fonctions dans le HTML)

Vous avez dû noter des asterisques sur le schéma de fonctionnement de Django. Ce sont les endroits où agissent deux parties de Django particulièrement mal comprises:

* Middleware: un nom pompeux pour dire “Une classe Python normale avec une methode appelée à chaque requête, et une méthode appelée à chaque réponse.” En gros, c’est votre moyen d’appliquer un traitement à toutes les requêtes ou les réponses. Par exemple si vous voulez rediriger tous les mobiles vers une version mobile d’un site, vous faite une classe dont une méthode vérifie le contenu de chaque requête, regarde si le Header “User-Agent” est un mobile, et court-circuite la réponse pour rediriger immédiatement. Il suffit de déclarer cette classe comme middleware dans le fichier settings.py et ça marche tout seul.
** Context processor: un nom pompeux pour dire “Une fonction Python normale qui accepte un Template Context (un simple dictionaire) en entrée, et qui le retourne modifié.” On l’utilise quand on veut qu’une valeur soit disponible dans tous les templates, par exemple en rajoutant la date du jour dans le Template Context.

C’est tout. Vraiment, c’est tout. Le reste c’est du bonus. Django c’est juste ça.

flattr this!

]]>
http://sametmax.com/schema-de-fonctionnement-general-de-django/feed/ 12