Josue Kouka

Josue Kouka

Code, Linux, and open source — one post at a time.

07 Aug 2013

Introduction a bottle

Hello guys !!! Oui oui, ça fait des années. Depuis le temps que j’ai envie d’écrire cette introduction à bottle . Je me suis levé comme d’habitude, la flemme d’écrire un article. Enfin bref comme dirait Franklin.

INSTALLATION

yosuke@loking:~$ mkvirtualenv bottle
New python executable in bottle/bin/python
Installing distribute............................................................................................................................................................................................................................done.
Installing pip................done.
(bottle)yosuke@loking:~$ pip install bottle 
Requirement already satisfied (use --upgrade to upgrade): bottle in ./.virtualenvs/bottle/lib/python2.7/site-packages
Cleaning up...
(bottle)yosuke@loking:~$ 

On a créé un environement virtuel (virtualenvwrapper) puis fait l’installation de bottle dans cette envrinement.

HELLO WORLD

from bottle import route, run, template

@route('/hello')
def hello():
    '''Returns a simple hello world
    '''
    return "Hello World"

@route('/hello/<name>')
def hello_name(name):
    '''Returns hello + name
    '''
    return "Hello %s" %(name,)

@route('/hello/age/<age:int>') # <var:int>, 'int' est un filtre
def tell_age(age):
    '''Returns Age
    '''
    return "You're %s" %(age,)

run(host='localhost', port='8888', reloader=True, debug=True)

Explications

On a declare trois routes. La derniere, /hello/age/<age:int>, utilise un filtre (:int) qui valide et convertit automatiquement le segment d’URL en entier avant de l’injecter dans la fonction - si on passe autre chose qu’un nombre, Bottle renvoie directement une erreur 404 sans qu’on ait a le verifier soi-meme.

REQUETTES

Bottle vous donne acces a request, qui contient les donnees de la requete HTTP courante (query string, formulaire, headers, etc.).

Get

Les parametres passes dans l’URL (?nom=valeur) sont accessibles via request.query :

from bottle import route, run, request

@route('/greet')
def greet():
    name = request.query.name or 'inconnu'
    return "Salut %s" % (name,)

# GET /greet?name=josue -> "Salut josue"

Post

Les donnees d’un formulaire soumis en POST sont accessibles via request.forms :

from bottle import route, run, request

@route('/greet', method='POST')
def greet_post():
    name = request.forms.get('name', 'inconnu')
    return "Salut %s" % (name,)

# POST /greet avec name=josue dans le corps -> "Salut josue"

Notez le method='POST' dans le decorateur @route : par defaut Bottle ne route que les requetes GET, il faut explicitement autoriser les autres methodes.