AviGNU - Mot-clé - WerkzeugGroupe d'utilisateurs de logiciels libres du Grand Avignon2024-01-02T17:40:01+01:00Administrateururn:md5:8ed776652564792dba453bac492a5a6cDotclearPrésentation du micro-framework Flaskurn:md5:be31c7c92e5f9503b2232f9b0c4910022011-11-23T18:15:00+01:002011-11-23T19:32:42+01:00Olivier DuchateauProgrammationFastCGIflaskJinja2PythonWerkzeugWSGI<p><img src="http://avignu.tuxfamily.org/news-custom/public/flask.png" alt="logo framework Flask" style="display:block; margin:0 auto;" title="logo du framework Python Flask" /></p>
<p>Ce billet constitue une présentation du <em>framework</em>, <a href="http://flask.pocoo.org/">Flask</a>. Il permet de créer rapidement et très simplement des applications Web (blog, forum, etc.).</p>
<p>Par la suite d'autres billets seront publiés pour présenter d'une manière plus approfondi quelques unes de ses caractéristiques.</p> <h3>Introduction</h3>
<p><strong>Flask</strong> s'inspire d'un projet écrit en <a href="http://www.ruby-lang.org/fr/">Ruby</a>, <a href="http://www.sinatrarb.com/">Sinatra</a>. Contrairement à ce dernier, il est entièrement développé en <a href="http://www.python.org/">Python</a>.</p>
<p>Il repose sur la bibliothèque <a href="http://werkzeug.pocoo.org/">Werkzeug</a> (ensemble « d'utilisatires » <acronym title="Web Server Gateway Interface">WSGI</acronym> en autre), et utilise le système de <em>template</em> <a href="http://jinja.pocoo.org/">Jinja 2</a> <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2011/11/23/Pr%C3%A9sentation-du-micro-framework-Flask#pnote-39-1" id="rev-pnote-39-1">1</a>]</sup>.</p>
<p>Il possède de nombreux atouts :</p>
<ul>
<li>Une excellente <a href="http://flask.pocoo.org/docs/">documentation</a>, tout est expliqué</li>
<li>La possibilité de l'étendre (en ajoutant des <a href="http://flask.pocoo.org/extensions/">extensions</a>)</li>
<li>Un système de vues assez clair (facilement compréhensible)</li>
</ul>
<h3>Installation</h3>
<h4>Sous openSUSE</h4>
<p>Il faut tout d'abord installer le dépôt <strong>devel:languages:python</strong> (Cf. <a href="http://avignu.tuxfamily.org/index.php?post/2011/11/21/Upgrade-openSUSE">Upgrade openSUSE</a>, la gestion des dépôts). Pensez à bien vérifier que <strong>Werkzeug</strong> et <strong>Jinja2</strong> soient installés.</p>
<h4>Sous FreeBSD</h4>
<p>Je suis le mainteneur, donc ce port est mis à jour régulièrement.</p>
<h5>À partir des ports (par compilation)</h5>
<p>Il faut mettre à jour l'arbre des ports, si vous avez correctement configuré votre fichier <code>/etc/make.conf</code>, il suffit de lancer cette commande :</p>
<pre>root@bornem:~ # cd /usr/ports/ ; make update</pre>
<p>On va installer le paquet, en le compilant (c'est assez rapide, car il y a très peu de dépendances) :</p>
<pre>root@bornem:/usr/ports # cd www/py-flask && make install clean</pre>
<h5>À partir d'un paquet pré-compilé</h5>
<pre>root@bornem:~ # pkg_add -r py27-Flask</pre>
<h3>Hello World !!!</h3>
<p>Notre premier exemple se fera à partir du <em>shell</em> Python.</p>
<pre>olivier@bornem:~ $ python
Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from flask import Flask
>>> app = Flask(__name__)
>>>
>>> @app.route("/")
... def index():
... return "Hello World!"
...
>>> with app.test_request_context():
... print index()
...
Hello World!
>>> </pre>
<p>Voici une explication concernant la déclaration de notre première variable <strong><code>app</code></strong> :</p>
<blockquote><p>About the First Parameter</p>
<p>
The idea of the first parameter is to give Flask an idea what belongs to your application. This name is used to find resources on the file system, can be used by extensions to improve debugging information and a lot more.</p>
<p>
So it's important what you provide there. If you are using a single module, `<strong>name</strong>` is always the correct value. If you however are using a package, it's usually recommended to hardcode the name of your package there.</p></blockquote>
<p>On peut bien sûr passer des paramètres à notre fonction :</p>
<pre>>>> @app.route("/hello/<username>")
... def hello_user(username=""):
... return "Hello %s" % username
...
>>> with app.test_request_context():
... print hello_user()
... print hello_user("Olivier")
...
Hello
Hello Olivier
>>> </pre>
<p>Voilà j'espère que les prochains billets vous intéresseront.</p>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2011/11/23/Pr%C3%A9sentation-du-micro-framework-Flask#rev-pnote-39-1" id="pnote-39-1">1</a>] La syntaxe est proche de celle utilisée dans <a href="https://www.djangoproject.com/">Django</a>.</p></div>