{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 2A.eco - D\u00e9buter avec Flask\n", "\n", "Pour aller vite, [Flask](http://flask.pocoo.org/) est un framework de d\u00e9veloppement web en Python. Il en existe d'autres, le plus connu d'entre eux est [Django](https://www.djangoproject.com/). Ce notebook la cr\u00e9ation d'un site web \u00e0 usage principalement priv\u00e9."]}, {"cell_type": "markdown", "metadata": {}, "source": ["En alliant le langage de programmation Python et un syst\u00e8me de templates tr\u00e8s riche, on peut cr\u00e9er assez facilement une application. Forc\u00e9ment, plus l'application que vous r\u00eavez de r\u00e9aliser sera compliqu\u00e9e et plein de fonctionnalit\u00e9s, plus le temps qu'il vous faudra pour la coder sera long. \n", "\n", "Mais avec [Flask](http://flask.pocoo.org/), on peut d\u00e9j\u00e0 rapidement obtenir des r\u00e9sultats, sans trop se perdre.\n", "\n", "Mais attention, [Flask](http://flask.pocoo.org/) ne fait pas tout : si vous voulez aboutir \u00e0 quelque chose de s\u00e9rieux en web-app, vous finirez par utililser [Django](https://www.djangoproject.com/). Mais [Django](https://www.djangoproject.com/) est tr\u00e8s lourd \u00e0 apprendre, tandis que Flask ressemble beaucoup \u00e0 ce qu'on a utilis\u00e9 pendant les cours. Contrairement \u00e0 [Django](https://www.djangoproject.com/) qui fait beaucoup de choses tout seul (ORM, validations formulaires, back-end admin...), [Flask](http://flask.pocoo.org/) reste simple et c'est \u00e0 vous de lui coder/rajouter ces composants \u00e0 la main. Il est aussi tr\u00e8s utilis\u00e9 et ne risque pas de dispara\u00eetre de sit\u00f4t."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Comment \u00e7a marche ? \n", "\n", "Pour commencer, disons qu'un site web n'est qu'un simple programme ex\u00e9cut\u00e9 sur un ordinateur. Si vous voulez une pr\u00e9sentation d\u00e9taill\u00e9e de l'\u00e9cosyst\u00e8me du web, [le r\u00e9sum\u00e9 de code school](https://www.codeschool.com/beginners-guide-to-web-development) est complet et tr\u00e8s clair. \n", "\n", "Quand vous vous rendez sur ce site web, vous \u00eates ce qu'on appellera un client, et l'ordinateur o\u00f9 est ex\u00e9cut\u00e9 ce site web est appel\u00e9 le serveur. Durant le TD, nous utiliserons le m\u00eame ordinateur pour faire les deux : le site web sera donc situ\u00e9 sur votre propre machine. Ce qui veut dire que votre application ne sera disponible que pour vous, on dit encore *\"en local\"*. \n", "\n", "Pour communiquer avec le site internet, le client envoie des requ\u00eates au serveur, en gros en lui donnant une page (une url) le client demande au serveur une chose bien pr\u00e9cise. Pour faire simple, tout se joue dans l'adresse mise dans le navigateur.\n", "\n", "L'adresse https://github.com/sdpython/ensae_teaching_cs est compos\u00e9e de plusieurs parties : \n", "- `https` : c'est le protocole on ne va pas en parler ici\n", "- `github.com` : c'est le nom du domaine\n", "- `sdpython/ensae_teaching_cs` : c'est le chemin de la page web demand\u00e9e, aussi appel\u00e9 *\"route\"*.\n", "\n"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Dans le TD comme tout se passe sur notre ordinateur, on n'a pas de nom de domaine; \n", "Il est remplac\u00e9 par localhost par convention. \n", "Pour acc\u00e9der \u00e0 la page appel\u00e9e \u201c/unepage\u201d, nous devrons donc entrer dans notre navigateur : http://localhost/unepage\n", "Et petite subtilit\u00e9, un serveur HTTP peut fonctionner sur diff\u00e9rents ports. Par d\u00e9faut, le serveur HTTP int\u00e9gr\u00e9 \u00e0 Flask fonctionne sur le port 5000, il faut donc le pr\u00e9ciser dans l\u2019adresse du navigateur. Ce qui donne au final l'adresse http://localhost:5000/unepage pour acc\u00e9der \u00e0 la page /unepage de notre application."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Premi\u00e8re page internet avec Flask\n", "\n", "Ex\u00e9cutez le code ci-dessous apr\u00e8s avoir \"d\u00e9comment\u00e9\" les deux derni\u00e8res lignes. Allez \u00e0 la page http://localhost:5000/. Pour quitter, il faut interrompre le kernel en cliquant sur *kernel > interrupt*."]}, {"cell_type": "code", "execution_count": 2, "metadata": {"collapsed": true}, "outputs": [], "source": ["from flask import Flask # pip install flask\n", "app = Flask(__name__)\n", "\n", "@app.route(\"/\")\n", "def hello():\n", " return \"Hello World!\"\n", "\n", "# if __name__ == \"__main__\":\n", "# app.run()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Explication du code pas \u00e0 pas"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ce code commence par importer le module Flask. "]}, {"cell_type": "code", "execution_count": 3, "metadata": {"collapsed": true}, "outputs": [], "source": ["from flask import Flask"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On donne ensuite un nom \u00e0 l'application ici ce sera app"]}, {"cell_type": "code", "execution_count": 4, "metadata": {"collapsed": true}, "outputs": [], "source": ["app = Flask(__name__)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ensuite vient la partie cruciale : d\u00e9finir une page (ou route) avec flask\n", "\n", "@app.route permet de pr\u00e9ciser \u00e0 quelle adresse ce qui suit va s'appliquer. \n", "\n", "Ici comme on est sur la page d'accueil, on met juste (\"/\") "]}, {"cell_type": "raw", "metadata": {}, "source": ["@app.route(\"/\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ensuite vient la fonction hello() qui va s'\u00e9x\u00e9cuter sur la page \"/\". On dit simplement que quand on arrive sur la page d\u00e9finie par la route juste au dessus, on va en m\u00eame temps appeler la fonction hello().\n", "\n", "Ici \u00e7a va donc afficher \"Hello World\" quand on arrive sur la page \"/\"."]}, {"cell_type": "code", "execution_count": 5, "metadata": {"collapsed": true}, "outputs": [], "source": ["def hello():\n", " return \"Hello World!\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["Cette derni\u00e8re partie permet juste de faire en sorte que l'application se lance quand on lance le code dans la console ou le terminal."]}, {"cell_type": "code", "execution_count": 6, "metadata": {"collapsed": true}, "outputs": [], "source": ["if __name__ == \"__main__\" and \"get_ipython\" not in locals(): # ne pas ex\u00e9cuter dans un notebook\n", " app.run()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 "]}, {"cell_type": "markdown", "metadata": {}, "source": ["Remplacez `\"Hello World !\"` par `\"ce que vous voulez\"` et affichez ce nouveau texte dans la page h\u00e9berg\u00e9e en local."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Deuxi\u00e8me page internet avec Flask - sans le notebook\n", "\n", "L\u00e0 il faut vous armer un peu de patience. Car le probl\u00e8me de [Flask](http://flask.pocoo.org/), c'est qu'on ne peut pas tout ex\u00e9cuter dans un notebook (le [CSS](https://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade), les templates, etc.) On va devoir repasser par Python [Spyder](https://pythonhosted.org/spyder/) (ou n'importe quel \u00e9diteur de texte comme [Sublime Text](https://www.sublimetext.com/) par exemple) et la ligne de commande. Mais pas de panique, on y va pas \u00e0 pas.\n", "\n", "### Les \u00e9l\u00e9ments n\u00e9cessaires\n", "\n", "\n", "#### Les codes .py exemples\n", "\n", "D\u00e9j\u00e0, les exemples sont disponibles dans le fichier [flask_complet.zip](https://github.com/sdpython/ensae_teaching_cs/raw/master/_doc/notebooks/td2a_eco/flask_complet.zip). Pour chaque \u00e9l\u00e9ment que nous regarderons il y aura un dossier correspondant. "]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Les outils \u00e0 manipuler\n", "\n", "__Sublimetex__\n", "\n", "L'\u00e9diteur le plus utilis\u00e9 par les d\u00e9veloppeurs web : [Sublime Text](https://www.sublimetext.com/). L'int\u00e9r\u00eat principal : pouvoir ouvrir dans un m\u00eame \u00e9diteur de texte, des fichiers avec des langages diff\u00e9rents ([HTML](https://fr.wikipedia.org/wiki/Hypertext_Markup_Language), [CSS](https://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade), python), tr\u00e8s pratique quand on code une application web. Et c'est cod\u00e9 en python ;)\n", "\n", "Vous pouvez t\u00e9l\u00e9charger [Sublime Text 3](https://sublimetext.com/3) (il s'agit en th\u00e9orie encore d'une version b\u00eata, mais elle fonctionne tr\u00e8s bien). Pour les sessions ENSAE, prenez la version portable. \n", "\n", "__Console__\n", "\n", "Pour ouvrir une invite de commandes :\n", "\n", "- sous Windows, il faut chercher *\"cmd\"* dans l'outil de recherche \n", "- sous Mac, utilisez spotlight (raccourci *Pomme + espace*) et chercher console\n", "\n", "La console permettra de lancer les *.py* et ex\u00e9cutera le script qui lancera l'application."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Lancer la premi\u00e8re page\n", "\n", "Prenez le code hello_world.py \n", "\n", "Ouvrir la console et taper `\"python xxxxxxxx/hello_world.py\"` \n", "(en remplacant les x par le chemin de votre fichier `hello.py`, par exemple `C:/T\u00e9l\u00e9chargements` ou `C:/Bureau/Python/`)\n", "\n", "Ouvrir une page du navigateur et aller \u00e0 l'adresse http://localhost:5000.\n", "\n", "Vous devriez voir une page avec le texte *\"Hello World\"* en haut \u00e0 gauche : si c'est le cas, bravo ! Vous venez de cr\u00e9er la premi\u00e8re page de votre future application."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"image/png": "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\n2Xgo8wcAAAAASUVORK5CYII=\n", "text/plain": [""]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["from pyquickhelper.helpgen import NbImage\n", "NbImage(\"simple_hello.png\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Ajouter un peu de style \u00e0 la page\n", "\n", "Pour l'instant, la page est assez aust\u00e8re, c'est normal, on n'a pas encore d\u00e9fini l'ensemble des styles qui iront avec cette page. Pour cela, il faut commencer par r\u00e9aliser une structure de dossiers que [flask](http://flask.pocoo.org/) comprend.\n", "\n", "En gros, on va indiquer \u00e0 [Flask](http://flask.pocoo.org/) des templates de pages et des styles pr\u00e9d\u00e9finis pour l'application.\n", "En ouvrant le dossier `hello_color` vous trouverez 3 \u00e9l\u00e9ments : \n", "\n", "- `hello_world_green.py`\n", "- un dossier `static` qui contient la feuille de style `main.css`\n", "- un dossier `templates` qui contient une page `home.html`\n", "\n", "La structure du dossier et le nom des dossiers `static` et `templates` sont importants : [Flask](http://flask.pocoo.org/) sait que c'est dans ces dossiers l\u00e0 qu'il doit aller chercher les \u00e9l\u00e9ments qui l'int\u00e9ressent. Si vous lancez l'application \u00e0 partir de la console vous verrez qu'\u00e0 pr\u00e9sent le texte est en vert ! C'est parce qu'on a d\u00e9fini les styles de la page. On va passer chaque \u00e9l\u00e9ment en d\u00e9tail pour bien comprendre comment \u00e7a marche. "]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnsAAAJzCAIAAAD4BUKtAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAADSqSURBVHhe7d1tjFz1veD5vqtZ7YxGs1rtC3tX\n2gkjra6QVsqiGTHreRGtX0wka27uyrqbO9c3ZBLn8hBDchMHkrkOAYLDUxOc0AlMcIhv6CTc0Em8\nphMc0heD6QsmbhvbtI2NG2ND+wFoxw80iQltuw3sr+qcLlfXU1c/1L/B/fmo4lSdOlWnu7o43/qf\nOnWq7X+5dcDJycnJycmp1adCcd8DuNA90jL5AqAhxQXmijyPLZAvABpSXGCuyPPYAvkCoCHFBeaK\nPI8tkC8AGlJcYK7I89gC+QKgIcUF5oo8jy2QLwAaUlxgrsjz2AL5AqAhxQXmijyP9f3617+Ofzdv\n3nyuKM6UJjaWLwAaUlxgrsjzWMf69evj32efffbEiRNZceNMXCxd1UC+AGhIcYG5Is9jHY8++mj8\ne+TIkZjzTFGciYulqxoo3j1MQHGBuSLPYx0xkA07duz4wx/+kM0fZ+JiNj2fqY5sfmhMcYG5Is9j\nfVlZN23aNFwUZ0oTG8sXAA0pLjBX5HmsoziUXf+b3/wm+7d0pjjZGLdZbU3IZ31/iJ9n+/bt+YUq\ncdUM/sCKC8wVeR7re/75548dO/baa68dKoozcTEm5lfXly+AYsDyc3W834qbNbVmdBtcNTWKC8wV\neR7r2Ldv39tvv53PWiYmxlX5THXks/IBLG6oWdYZz21QXGCuyPNYRzbPuXPn3ikTF7Pp+Ux1ZPMQ\nPojFDRV9bUVug+ICc0Wexzqir++++24+a5mYGFflM9WRz8oHtrihVNnSmfyKmaO4wFyR57EF8gW0\nRqz9J5TP+j4w4Q/zvvppK2StDa3IbVBcYK7I89gC+QJQ3IYUF5gr8jy2QL4APsjFzXIb/5bO5FfM\nHMUF5oo8jy2QL4APbHErKtui6CouMFfkeWyBfAF8MItbs6+tiO6MFffIkSMbijbD+8/GjRsfffTR\nvXv35s9X5qQ8jy2QL4APYHEblHXGozszxX377bejtTt27HjjjTf+AO9L+/bti+iePHkyf9Yy9+R5\nbIF8ARSDOqF81veH+HkaNDWLbn5h2mamuC+99FKMIeSW97kY7G7ZsiV/1jL35HlsgXwB0NAMFHd0\ndDQGuHv27MnXavB+deTIEcNcYLbMQHEHBwejuAa4fCDEMHcG35UBaN4MFLe3tzf7Dmd4/9u/f38M\nc2sesB6gpaZb3Gwz3fHjx/P1Gbzvbdy4cdeuXfkzGCCV6RY3Brhbt27N12TwQZDttGyYCyQ2reKe\nPHky1lwxzM3XZOO9W0fhCzry/72T3c/bp0dPjZzNzo+OFr4qK78LaIE33nhjw4YNL730UvaUq+mP\nf/xjPL1b59SpU/mSgDljWsXdsmXL5s2b89VYlYhrzJNVNs7m/18s7jvvvjta+NbJdw8df2vZD7Zc\nsqLn//7GE3/13We2HTgeN4mr8ruA1tizZ09Ed3R0tPhErpR9A/nBgwcPtcYrr7yyd+/ew4cP58sD\n5oapFzdep8cAd//+/fk6rErMkzd2vAjuaJxGz7195tyiO55sW/yTtv/3H/7ynt/+8MkD/+Zz3b/c\nfiRul98FtMbx48fj2VtvmPv666/HVS318ssv79y58/e//32+SGAOmHpxd+3atXHjxnwFVkvENZKb\nV7e4FblwGjt/7ty50+feuWJ1X9tfPNj2Fz+5/mc74z7/vvfl//OrPSdPnc7vAhp6880383Nlak6s\ntmPHjt7e3uzJXOHVV1997rnn8ja2zIsvvhj/5osE5oApFvftt9+OIcK+ffvytVctMZY9M3ru9JnR\nwoj2nXfPjp47OxpTCgPcM2fj/LmI7x9Gzj7wTy939R384+nRGPW+cuzUv7/58acGjuV3UWn/Ax9r\n+9gDdUfVk1d2hxtXtrWtbPQKggtLDGSzvRDy53SZGHo+++yz8fTO0tgiBw4c6O/v/+Mf/5gvFbjQ\nTbG4McCd8KgXEdQ7H9n7rz778P9+3a8//F9/c+lNG/7tDY99eMU//uu//dVFX3zkn/b+LmYovptb\nMHouhr/vvPj676O4m/Z9oIu7ffVHL3toBn9G6ohkbtmyJb9QJibGVfmFhjZv3lxzmBuv/l544YWd\nO3fmbWyZPXv2DA4O5ksFLnRTKW6sj2JwMOFhHWOMO3j8rY0vHI1R7L/5wq/a/vIf2j7R9c+X/uL2\nh/c8NfC7E38YiRnOvfNOcex77vTZ0Qjwb3a+9m9v+MejwyP5XVT6QBQ37mhGf0aqxBg0/t2+ffuf\n//mfP/TQQ9mUbGJcjIlxVWm2Buod9DGeiseOHYty52FsmVdeeSW6bpgLc8RUihtrilhPTXjUiwhq\nfoP33tty4MT/fOW6/+6yn/3r5Y8cO3U6pmT7LBcUz0V0Y+LS72/55H/bHGfyu6hUUdz9j9552aUf\nKnwTxYcuvezOjYfzyeHwM6sv/+ifzitc89GVjxauOLZ73cps5nl/+vGOZ/JRdGVx121/4JqPxkzl\n84TDhcnFu5v3px+95oHtpWuOFZaT3elHV8dKvnAnJbZRt1xXV9fHPvaxLLohzsTFmJhdbMbGjRtr\nfrfBmTNn4jVlyNLYOjGYfvXVV/OlAhe0SRc3+96CZg7rGB09d+6dM6OjI2cKn7X9zPe3tC15qO2v\nfnrnr/ZGZkfOjBZ7W9iXavRc4T3dl4b+MG/Zwxv3HI3z+V1UKi/u4XWXz7v02nX7i/WLwn583qUr\ns0ge27jy0nkfX/1MscCHN657tHCD/es6HsinPHrth+dd+2hx1orizvtI3GHhwu4HPj5vbJ4/PHPn\n+bs7tn/dtXEp22pc+BE+tnp3Ya5o8rrCsCoY4yYVff2zP/uzXxTFmUnlNmQHfaw5zI0QJhjmxg/w\n/PPP1/ucEnAhmXRxsw1xzbxPFuusYlAL0Y3zWw+c+J8u//8iuv/Hf/3NG6dOnyvurpzNc/psYXVz\n5Q+2/sfbn4x1XYx387uoVBbIZ+4sZTOze/VH264pTIgz84pn6jrfxIriXvZQaZy88dq2D9/5TJyJ\nrLZ9dPXubGrBsUevnfeR4oTCrS9fV7kkxU0n224crf3LojhTmti8eAVZ86CPIyMj/f39CYa5O3fu\njP+g8qUCF65JF7e3t7fBUS/KRU2LQc03GseY9vIY5v7nn/6zy7rufWxf3NXpM6NxXVwVs+19/ff/\n29XdvXuORqLPnp24uPsf+njErtTHgrx0hUJWXFN0ePe61dde/rGPfKS4abl2ccu2A5cuPrNyXpbe\nksKNsjn3r7v80nl/+vGVD2wsK6zipjMjxY2mxovI6oM+xtPy8OHDyYa58Z9JvmDgAjW54mYD3IMH\nD+brqoaKwc2GuTFsHY0V2KZ9x/7HGOb+1UP/19ce+93vR0ZjkBsD3DOFAe7nf7jtz+76p5j3TKOj\nPJYVN85VDGTz0tW4pvB+68pL53105UPP7D58+FhZE5sobpzJRrQl54tbcHj7uo7LPjJv3scfyGc6\nf+8kMM2tyuGNN96IZ3W9Ye727dv37t2bt7FlYjB9/HjhgGvABWxyxd20aVPjo16Uy1pbiG4hu4XP\n4I6+884n7v1tFPdPPtG15skDcYdvnz4bM+177c3/9XO/3LjnaEw5c7bw/m5+F5XKAvnMnR8eP/Qs\nbEwubmauuibEQPV8No89es0kilsYM5dtbc62Ko/bzFywveMjY7dW3HSir9PccyqzY8eOiG71m6nx\nVHz55ZfTDHNfeOGFWFy+YOBCNIniTnhYxwpZbkuiuHEnvXuP/qvPrI3o/ocbNwz/MfJa2KT8xR/v\n+E939EZ6C5cLdW6iuIXtyuP3nPrQ2Chz3DX7H33o0f3FN3k/llVy/7prPzJvEsXNxsfj9py6dOXG\n4n0/s3rlo/nyH732w5d2ZLtOFTZDX5vNQGtk242n/+mgkgYHfTx16lTc28DAQJbGFon/rHbu3Dk8\nPJwvFbgQTaK48Up/w4YN+SqqCVloM8WMvnO2uKvU4rufblvy0J/8ddePn34l7vblY6c+9Plf9ex6\nLc5HcbP587uoVF7csHvdyo/X+szOH46VPs3zoUsvK37M59j21ZcVJhQ/9rNuMluVC4ofNqr+GNL+\ndeeXUvbhpN3rrommt81bWTHQZmZN/wgY5bZu3Vrzuw3OnTsXOdy2bVvexpZx0Ee44DVb3BguxCBg\nz0RHvSiXtTMTuY1/zxRXZxv3DP0Pn/p5218/9O++9o/vvffulx/a+ZFvPPFe4TNChR2psjnzu4BU\nsn0Uah4B6s0334wet3qYmx30Mf5Dy5cKXHCaLe6uXbtifdT4sI4VshsWg1sQKR09d2703DsjZ88t\nXvVU21/+w7/8zNqOf9z3777a8/DWw+/mA1zFZRKm800G1Z566ql6B32MAeizzz6bt7FlYinR3Xyp\nwAWnqeJm31vQzFEvymWhrRBZjTt8+Nkj//1fP/TPr1rX9p9/+hffevrtM8UUj+1pFTPkdwEJ7S8e\nDaPmdxsMDw/HMDcPY8tkX+HnoI9woWqquNkAd8LDOlbIbptFNBNNja6eHR3945nR/+eb/xS5/RdL\nf9GzM3sHNz8aRjZnfheQ1saNGzdt2pQ9dcvFMHfPnj39/f15G1vmhRde+N3vfpcvFbiwTFzcWNds\n2LAhXuDn66Sm5bcvfsQi+zeTHWHqkede/ZO/+MnHVj01UvzmvmwX5VJ087uAtPbt2xcvLmse9DFC\nuGXLllZ/Njfu//Dhw/lSgQvLxMWNtUC2qS1fJ8GF64033ojXl1HW/Nlf5syZM/HfwubNm+Pa7a2x\nbdu2Z5991s5TcKGauLixAnrqqafyFRJc6LL3UGpm76233jp69GiMQQ+2wKGiY8eOnRv70mjgAjNB\ncbOPTDR/1Av4oMuOhlHzoI8hcni2leQWLmATFLe3t7f5wzrChSE76GP1dxsATEej4mYD3H379uXr\nIZgbsmd+vWEuwNTULe7o6GgMcDds2DCpo17AhWHz5s0RXTsxATOodnGPHj26adOmWONM6rCOcMHI\nhrnxivPVV1/N/6sAmJ68uLFyKbelaNu2bQa4zFm7du3K/kPI/6sAmJ68uPk6BgBoDcUFgBQUFwBS\nUFwASEFxASAFxW2tkydPPvfcc4888sjPAUiup6fn/XOgYsVtrcjtk08++dZbb+WfxgIgod/97ncP\nP/zwwYMH85XyrFLc1orRrdwCzKJ9+/ZN4SveW0FxW+vnP/95/jcHYDbEMPfxxx/PV8qzSnFbS3EB\nZpfizhWKCzC7FHeuUFyA2XWhFff3v/99fu6D780336z4deJiTMwvTPKXVVyA2TUjxY0KDA8Pl7dg\nCmaguFmBDh06lOaLhmJx8WvnF2ZUeUqHhoYOFsWZbEpcm4nzzf8AkyruO++88+677+YXxtScCDAH\nnSvKLzTtwhnjZsGPX+bKK6/8yU9+EudblMOSw4cPP//886UQzpQspaG3t/e73/3u1Vdf/alPferT\nn/70Nddcc8899zz99NPZtWHv3r0/+MEP8gsTab64payePn06HsPjx4/HzSO32cTSGYD3mxMnTnz/\n+9+/7bbbbr/99uzfO+64Y9euXbHiikDGvxWmMIqIW8W/TxSVLjZpRoo7MDDwi1/8Ytu2bfnlKZlW\ncbPcbtiwIeL0mc985sknnyxNbJ1obfwhd+/ePYPRzXL76quv3nXXXfGL/M3f/M3nP//5m2666cYb\nb4wzl19+eUxctWrV0aNHjxw58qUvfen666/PbjihSY1xDxw48KMf/egrX/nKZZddlv0Yt9566/r1\n6+N+4tqmnqNDXYvb2tr78kszrq+9rW1x11DxfGFRY+eBuey+++674oorslFKiDNxMSbmV9cyqWSG\nWAFGvL9aFGcm1ezpFDerw+DgYKz5Y7UcOejr64spUyvd1Itbym38EEuXLo0zcbE0Umyp1157LYob\nI93XX389nzQN2c8cKf27v/u7eJZEZZ955pnSPUeGN23atGLFinigI7TZPLfcckt27YSaLO6ZM2ce\n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\npKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC\n4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooL\nACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCk\noLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILi\nAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsA\nKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSg\nuACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguIC\nQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwAp\nKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4\nAJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJA\nCooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACko\nLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgA\nkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAK\nigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSgu\nAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQ\nguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqK\nCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4A\npKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC\n4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooL\nACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCk\noLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILi\nAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsA\nKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSg\nuACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguIC\nQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwAp\nKC4ApKC4AJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4\nAJCC4gJACooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJA\nCooLACkoLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACko\nLgCkoLgAkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACkoLgCkoLgA\nkILiAkAKigsAKSguAKSguACQguICQAqKCwApKC4ApKC4AJCC4gJACooLACnkxXVycnJycnJq7enW\ngf8fK2KHwIdGv1IAAAAASUVORK5CYII=\n", "text/plain": [""]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["NbImage(\"green_hello.png\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Le hello_world_green.py\n", "\n", "Par rapport au pr\u00e9c\u00e9dent `hello_world.py`, on a modifi\u00e9 quelques \u00e9l\u00e9ments. On importe la m\u00e9thode `render_template` qui va permettre de faire le lien entre le *.py* et la page html pr\u00e9d\u00e9finie."]}, {"cell_type": "code", "execution_count": 9, "metadata": {"collapsed": true}, "outputs": [], "source": ["#!/usr/bin/env python\n", "# -*- coding: utf-8 -*-\n", "\n", "from flask import Flask, render_template\n", "app = Flask(__name__)\n", "\n", "@app.route(\"/\")\n", "def hello():\n", " return render_template(\"home.html\", message = \"Hello World!\")\n", "\n", "#if __name__ == \"__main__\":\n", "# app.run()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ici, au lieu de renvoyer le texte directement, on demande d'injecter dans le template de la page home le message `Hello World`. "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Le template home.html\n", "\n", "Dans ces lignes, il y a deux \u00e9l\u00e9ments importants :\n", "\n", "- l'appel au *css* pour avoir le style\n", "- l'int\u00e9gration de ce que python injecte dans la page\n", "\n", "L'appel au css se fait dans la balise `` o\u00f9 on indique le chemin pour acc\u00e9der \u00e0 la feuille de style. On int\u00e8gre ce qui est envoy\u00e9 gr\u00e2ce au caract\u00e8re `{{ }}` ici on aura donc le message `\"Hello World\"` qui sera affich\u00e9 avec un type `h1`."]}, {"cell_type": "raw", "metadata": {}, "source": ["\n", "\n", " \n", "\t\t\n", " \n", "\t

{{ message }}

\n", " \n", ""]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Le main.css\n", "\n", "Justement le `h1` dans le *css*, on lui dit \u00e0 quoi il doit ressembler. On va lui donner une couleur verte et le centrer."]}, {"cell_type": "raw", "metadata": {}, "source": ["h1 {\n", " font-size: 2em;\n", " color: green;\n", " text-align: center;\n", "}"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 2 "]}, {"cell_type": "markdown", "metadata": {}, "source": ["Changez le texte de la variable message, passez le en rouge, texte align\u00e9 \u00e0 gauche, police 1em.\n", "\n", "Pour que le style s'actualise, il faut :\n", "\n", "- modifier le *.css*\n", "- enregistrer les modifications\n", "- clic droit sur la page http://localhost:5000/ pour afficher le code source\n", "- clic sur `static/main.css`\n", "- actualiser cette page *(F5)*\n", "- retourner \u00e0 la page http://localhost:5000/ \n", "\n", "Si vous voulez tester [d'autres styles](http://www.w3schools.com/cssref/)..."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Naviguer entre les pages\n", "\n", "Pour l'instant, on a vu comment faire une page simple, maintenant on va en faire deux et comment passer de l'une \u00e0 l'autre. Pour cela, ouvrez le dossier multiple_pages. Par rapport \u00e0 l'exemple pr\u00e9c\u00e9dent, on a ajout\u00e9 1 template html `'page_suivante.html'` et modifi\u00e9 l\u00e9g\u00e8rement le code *.py* ainsi que la page `home.html`."]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"image/png": "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\njnxOza6VbhHzefSBFYFuVWW+AZYM4/O542TECWB6/TJXKk5PjA6p/eGBrnPopNuPT3i3fNcwO7TQ\ncgoD1UMi3Y583pKKe7p8P1N406c02u3vIepUVcQLnwC8KbDOnvfCMju0xvvnTrd6MKJ8LAbyecuK\n2oXeOZR+inVpdGubvSdjq28XdaBycSznHNXc1rUnfhtLn7VOPm+k5uXzuBPgQ10PO8qw1FiRz6MO\nYgyuX5xKEOwnquGWfA4jhGZU8nlrSt30KZZ3LpU78nlt0vP5vBeWiGuArUg/LrcxyOetqzTaE5xP\nMuz6m3WO720fXKxItLhKR3tWrGtbNRhzwOJcYai/fdm67tHIE0bOVzbbyOeN1LR8nu9zDjlZ1bMn\nX1Txu1ScOJCL2p22zH9UFGC/JZPPRWEgtNi3dR0IVo3g8e3BTT2gFZDPDZG+6ZP3r77acuP6DWQT\nPL49tDtu3gtL5P7zJi1v5PNWlh9c4Z9Pli1b35ccdty97lzJPKwwWF2uyeeN1Kx8ns+1rVsTcSBS\nYTC0vqXZGkvOUsrnstCHT3SJOD2scn24a7k+HFoV+dwQ6Zs+pdGt3h44YKd21QvsBa4Pp8x/YQm0\noUi3SFuwYeTzlha1G6AnadefswtxhaU7z+fBG86lI583UpPy+cTOVT1HoxeN8Kki5HMsNUsqn18d\nGwj2RqqBmcjnhsiw6eM7R53fceHNf2GZHgp8QvOOqyKft7bi0Cb/rOLMLUNxc0tprKdt3aqUK6Qt\nNecnQpfVJJ83UrP2nycoDKz0jRKHlWHJIZ+zNQwTkc8NkWXTx7MtspIL1S68BVhYCkMrvZ+wenfT\nfibyeYtzI3d1VnG7uATuhvn49C49FA4MdG9aWb4bWdu1udVd2wfHou8RG7EhJF1lx2PE9o900ctC\ncWJPX1dvu3vPwmXL16/u2jnq3JX95OCaugvN3PTY7upntq1f2TkwOBb+rMKQ527w0V3k1t10frCv\nf3V5Ql27clNuMB8/ptOjA1s7V65XrQBOz0MT8iOUxgbaa4+m2aZVqBC4XeU0mZTfTom+mlplKDKF\nh7pXuV9qeW9uNPsZE9nz+Vxx4uhgv0y6nP6+ep7cOVxY2AbL4CU/Ug4ry/brhwqB21UmcnFiKLdp\npXsTTed37B4KXjTB20Pb+lXOD512gG1ts2WU6MVWzTmFYRmf8mwsP0RnbvdY6ijN50dUX6c8xIQu\n+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\nBvI5AAB2I58DAGAG8jkAAHYjnwMAYAbyOQAAdiOfAwBgBvI5AAB2I58DAGAG8jkAAHYjnwMAYAby\nOQAAdiOfAwBgBvI5AAB2I58DAGAG8jkAAHYjnwMAYAbyOQAAdiOfAwBgBvI5AAB2I58DAGAG8jkA\nAHYjnwMAYAbyuZHOvXXwkYe7P/3Ycf3cWM4X2Xb7rSMz+nkrKu57uGPFxqFJ9WyuOHl4R8+DHZvG\n1XMAaH3kcwAAzEA+bzUXjj12yyd6734yIbGem5l666mber/wCcPzeWnq+Asjfdf3fuEmlc9L+Q29\nHTfsKrhvtg5fPj83c2rymbs/0fsF8jkAc7RePo9oZn59xw29Hfccu6CfoqGY2gDQomzM52dGh83O\nTsUXdtzS8cwp/Sza8U3m53PHuYM9lXw+86wZjQ7jW8jnAIyy+Pl8bubYyAPdGztXyGq9t+OzD967\nZX/h3FxxeNfBc/JuZDMziXExMbUBoEVZmM+nnuk2PzvNDD/27JR+HMmWfO5+kfL+8yP39H7hhpSG\niRZAPgdgmMXN56W3nuru/cKKBx8Yfn2mNOe+dGFm8vCAE8g3P1s+OsyaMmYI4/ddAMASYVs+L41v\n+fySyE425vOrpx7f+IV7jl1yH7cw8jkAwyxmPn/32VslnG+OamOWtzY/VX6dfL6orNh3AQBLQavn\n83Nv5Z987O7P9m45duHEI5s7PtG7dvhd9U7x2K57O6S4O8fN9T35lnOI1szh+yScS3ZSXTn1XZ3J\nOxf0cl+8pfux0Ul1OJebspxOt+bPPLlZ/aE+9ztq0JdmXh/VZ8zNnRre0f1p2Qi5/97yKCkRI3b1\navkPZYvl3YP3bOxYsVE+1n3H60LhyR3dn3XHasX93ffsL+9liBDcsDmXH+i+X33Hjs9v23E88pC1\n0syxkQF1bTPp/1an/46OHaNTaveGo3hs59ryNLyle9eJkn7dNZPfsu0W+cruu+Vu26hzrKI4k3e+\noPNiZ8eOZ/VEjuTp89ZdA9Xj269ePfbY7Y+XN91Kbz17z4OVQyP79vkm8oXJkb4O9/t++v61W/JF\n/bIj/Fblly2H6spP790yjBn/c28dfHzH3Z+t7vIhnwMwzuLlc7XC7a6sygNmRp49ph+SzxfPktl3\nAQAWaO18Xrpw7tyJRx6UWr+2Z+fAk89I/O7Y4OxflQ2A2zccnnHS47nC4054vntY5Sf3HGZvDZoa\n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\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiB\nfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwO\nAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA\n3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I\n5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcA\nAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACY\ngXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8\nDgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4A\ngN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDd\nyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjn\nAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAAmIF8DgCA3cjnAACYgXwOAIDdyOcAAJiBfA4AgN3I5wAA\nmIF8DgCA3cjnAACYoen5nI6Ojo6Ojq7RndRc8jkAAK2u7mqrc3mZfhUAALSkBcjndHR0dHR0dI3u\ndN2tkc7lZfpVAADQgq5e/f8B5/m9Mhl/PLAAAAAASUVORK5CYII=\n", "text/plain": [""]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["NbImage(\"2_pages.png\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Regardons tout \u00e7a en d\u00e9tail."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### app_two_pages.py"]}, {"cell_type": "code", "execution_count": 11, "metadata": {"collapsed": true}, "outputs": [], "source": ["#!/usr/bin/env python\n", "# -*- coding: utf-8 -*-\n", "\n", "from flask import Flask, render_template\n", "app = Flask(__name__)\n", "\n", "@app.route(\"/\")\n", "def hello():\n", " return render_template(\"home.html\", message_bienvenue=\"Bienvenue sur la page d'accueil !\")\n", "\n", "@app.route(\"/next\")\n", "def suite():\n", " return render_template(\"page_suivante.html\")\n", "\n", "#if __name__ == \"__main__\":\n", "# app.run()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Par rapport \u00e0 l'exemple pr\u00e9c\u00e9dent, on a ajout\u00e9 une route et une nouvelle fonction. La nouvelle route est celle d'une deuxi\u00e8me page \u00e0 qui on applique le template html `\"page_suivante\"`. Dans cet exemple, on n'injecte rien depuis python dans la page."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### home.html\n", "\n", "La page d'accueil a \u00e9t\u00e9 l\u00e9g\u00e8rement enrichie d'une ligne pour acc\u00e9der \u00e0 la deuxi\u00e8me page."]}, {"cell_type": "raw", "metadata": {}, "source": ["\n", "\n", " \n", "\t\t\n", " \n", "\t

{{ message_bienvenue }}

\n", " \n", " Cliquer pour continuer \n", ""]}, {"cell_type": "markdown", "metadata": {}, "source": ["On inclut un lien dans une balise a un peu passe-partout. Le `href` est une balise qui permet de mettre des liens et pour indiquer \u00e0 [flask](http://flask.pocoo.org/) \u00e0 quelle page il doit se rendre en cliquant sur le lien il faut lui donner le nom de la __fonction__ d\u00e9finie pour la page (pas la route !) Dans l'exemple on donne indique bien ``url_for('suite')`` et non pas ``url_for('next')``."]}, {"cell_type": "raw", "metadata": {}, "source": [" Cliquer pour continuer "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### page_suivante.html\n", "\n", "Elle ressemble beaucoup \u00e0 la page `home.html` sauf qu'on n'a pas mis d'\u00e9l\u00e9ment entre `{{}}`. Et le lien pr\u00e9sent dans cette page renvoie vers la page d'accueil."]}, {"cell_type": "raw", "metadata": {}, "source": ["\n", "\n", " \n", "\t\t\n", " \n", "\t

Vous \u00eates sur la 2eme page

\n", " \n", "\t retourner \u00e0 la page d'accueil \n", ""]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Envoyer des informations\n", "\n"]}, {"cell_type": "markdown", "metadata": {}, "source": ["A pr\u00e9sent, on va voir comment on peut remplir un formulaire (dans notre cas, renseigner son nom dans une box). Dans le dossier `\"login\"`, on a comme d'habitude, le *.py*, les templates html et le style *css*. "]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"image/png": "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\nSItRWRPI58OnsLDQ4XBce+21HTp0UCcBAJrKgQMHPv/886uvvvqiiy5SJzUf8vnmR1QGgGakxais\nCeTz4ZObm3vTTTdRbQCA5rJjxw7J4C6//HJ1vPmEWHPg/vkwKioqIpkHgObSrVu3AQMGlJSUqONA\ni3fixAmqDQDQjGJiYo4cOaKOaAH5fBgRlQGgeWkuKgMAAISOfB4AAAAAAO0hnwcAAAAAQHvI5wEA\nQJM6e/asOqR9Z86c8fk4MioT1ZFz68MCAEIhUaCiosIzFoRPI+TzRGUAwDmsKaPy+UAiaatWrQ4f\nPlxeXq5OCidZnXx96kijUqoErVu3lo9z7NixH91kQEZlosxVyGiYNsC/0iICTgSA85CUvWEqfmsl\nUaBNmzbyVx0Pp4auQwlUROWGIyoDQBDuoHzuR+VznsQ1iaTr1q174oknli9fLlPC/bWWlZXt3btX\nAro63kiUKoEMbNy48dVXX3388cf/+te//u1vf/vf//3frKys/Px8masoKip66623lFc1ItkApdJy\n8uRJh8NRWlr6008/ye5VJsqAuhwAtDCHDh2aN2/eU0899fe//135O2vWrM2bN0vBJRFB/vqoRzYk\nr5K/uW5Vo01p3759OTk527dvV8fDqU3UTQ//wdRRHasj2TUSNiQqv/jiixJO4uPj5TsIa41HovKB\nAwfatm3brl07dVJj8IzKK1asWLp0qfyVr3/t2rXyZcj07t27u2KyOyrLdzNw4ED362pRWFg4YMAA\ndSQoz6h81E32pHzMqqgsf9VFAaAlkaj8+uuvS5m5Zs2aTz/9VP6K6Ojorl27KuFTyjdPMqWuBZpS\nBq5evdput19yySV1KhIliyspKYmLi1PH60UCwRdffCHFcpcuXdRJdfevdT898rP6v7xFeebT0vrV\nHJRqQ15enhwzMnrDDTf06NFDBsIa4+SLk8PgxIkTjVh5kCNZtvnIkSOSya9atUqOscjISKkqyJEv\ncVyqCl999dWePXuuuOKK48ePP//88xLW5cOqLw4q9JqDbMB333333nvv2Wy2JUuWfPzxx1I/2bJl\ni2yVbIler1c2Ul26JsU284VX2pPSRzToJ1KjvIxWvZ6OT0keGKWs6jGdMgzgfLZgwYINGzZITidV\nCFFaWioFV3l5+bXXXqvkPv7qkQ3JS+bPn//999+PHDlSeVt1Rm0aUnNQCl75UC+88MI333wjqWWv\n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\nyOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAA\nAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe\n8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAA\nAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSH\nfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAA\nAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0h\nnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAA\nAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI\n5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAA\nAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7y\neQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAA\nAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8\nHgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAA\nANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGf\nBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAA\nALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jn\nAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAA\nAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5\nAAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAA\nQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3we\nAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA\n0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8H\nAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAA\ntId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcB\nAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA\n7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkA\nAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABA\ne8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4A\nAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQ\nHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcA\nAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0\nh3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEA\nAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADt\nIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAA\nAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7\nyOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAA\nAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe\n8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAA\nAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSH\nfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAA\nAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0h\nnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAA\nAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI\n5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAA\nAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7y\neQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAA\nAEB7yOcBAAAAANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8\nHgAAAAAA7SGfBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAA\nANAe8nkAAAAAALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGf\nBwAAAABAe8jnAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAA\nALSHfB4AAAAAAO0hnwcAAAAAQHvI5wEAAAAA0B7yeQAAAAAAtId8HgAAAAAA7SGfBwAAAABAe8jn\nAQAAAADQHvJ5AAAAAAC0h3weAAAAAADtIZ8HAAAAAEB7yOcBAAAAANAe8nkAAAAAALSnleGJbfsf\ni1fHAABAGHR/suCcibbyWdQhAAAQNqHUHFz5vDoIAADChrPnAACgMel0/x9ZX8o9F6oBvQAAAABJ\nRU5ErkJggg==\n", "text/plain": [""]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["NbImage(\"login.png\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### home.html\n", "\n", "Cette fois-ci on commence par regarder la page html : on voit apparaitre un nouvel \u00e9l\u00e9ment le `\"form\"` :\n", "\n", "- On indique POST pour dire qu'on va s'en servir pour que l'utilisateur puisse fournir des informations.\n", "- On indique aussi que ce qui sera donn\u00e9 est consid\u00e9r\u00e9 comme un *string*\n", "- Pour l'exp\u00e9rience utilisateur, on pr\u00e9cise aussi qu'il y a un bouton *\"OK\"* pour envoyer le formulaire"]}, {"cell_type": "raw", "metadata": {}, "source": ["\n", "\n", " \n", " \n", " \n", "\n", "\n", "

Indiquer votre nom

\n", "
\n", " \n", " \n", "
\n", "\n", ""]}, {"cell_type": "markdown", "metadata": {}, "source": ["### login.py\n", "\n", "Ici on va se concentrer sur la fonction ``text_box``. Nous aimerions r\u00e9cup\u00e9rer le message envoy\u00e9 par l'utilisateur et le lui afficher. Pour r\u00e9cup\u00e9rer les informations envoy\u00e9es par l'utilisateur, on va importer une nouvelle m\u00e9thode de [flask](http://flask.pocoo.org/), la m\u00e9thode ``request``.\n", "\n", "Pour cela, il faut utiliser la m\u00e9thode `\"form\"` de l'objet ``request``, qui contient toutes les donn\u00e9es du formulaire envoy\u00e9 en *POST*. La m\u00e9thode form est un dictionnaire qui associe la valeur \u00e0 l'attribut name du champ du formulaire. En l'occurence, l'attribut name du champ texte vaut `\"text\"`. Pour r\u00e9cup\u00e9rer son contenu il faudra donc faire ``request.form['text']``. \n", "\n", "Et voil\u00e0 !\n", "\n", "Ensuite on r\u00e9utilise ce qu'il a entr\u00e9 pour l'injecter dans une page de bienvenue."]}, {"cell_type": "code", "execution_count": 13, "metadata": {"collapsed": true}, "outputs": [], "source": ["from flask import Flask, request, render_template\n", "\n", "app = Flask(__name__)\n", "\n", "@app.route('/')\n", "def home():\n", " return render_template(\"home.html\")\n", "\n", "@app.route('/', methods=['POST'])\n", "def text_box():\n", " text = request.form['text']\n", " processed_text = text.upper()\n", " return render_template(\"bienvenue.html\" , message = processed_text )\n", "\n", "#if __name__ == '__main__':\n", "# app.run()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Conclusion\n", "\n", "Voil\u00e0 pour la base de ce qui se passe quand on utilise le framework [Flask](http://flask.pocoo.org/). C'est une tr\u00e8s tr\u00e8s courte introduction et si souhaitez approfondir vous pouvez suivre le tr\u00e8s bon cours Openclassrooms https://openclassrooms.com/courses/creez-vos-applications-web-avec-flask/\n", "\n", "En attendant, on va essayer de faire ensemble un questionnaire Pokemon ou Big Data, histoire d'avoir quelque chose qui fonctionne \u00e0 la fin de la s\u00e9ance.\n", "\n", "Pour cela, ouvrez le dossier `pokemon_big_data` et lancer le code *.py* en ligne de commande pour voir ce que \u00e7a donne sur http://localhost:5000/."]}, {"cell_type": "code", "execution_count": 14, "metadata": {"collapsed": true}, "outputs": [], "source": []}], "metadata": {"anaconda-cloud": {}, "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1"}}, "nbformat": 4, "nbformat_minor": 2}