technique:python:flask

Ceci est une ancienne révision du document !


Flask

Mini framework pour faire une petite appli web avec des templates, du mail… : https://palletsprojects.com/p/flask/

6 tutos vidéos sympa en français : https://www.youtube.com/playlist?list=PLn6POgpklwWrbGpkwkTS-TvnXxp34srC4

5 autres sur Flask et les formulaires : https://www.youtube.com/channel/UCABGT_MVqwPXXbdrOO_uYFQ

https://www.tutorialspoint.com/flask/index.htm

myapp.py :

#!/usr/bin/python
# -*- coding: Utf-8 -*-

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/accueil')
def index():

    # dictionnaire de data
    data = {'user': 'Xavki', 'machine': 'lubuntu-18.04'}

    # affichage
    return render_template('index.html', title='Home', data=data)

@app.route('/hello/<string:username>')
def bonjour(username):
    # on oblige username a être une chaine
    return "Page Hello " + username + " et bonjour !<br/><a href=" + url_for('index') + ">Retour</a>"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Dans le sous-dossier “templates”, un fichier index.html

<html>
    <head>
        <title>{{ title }} - Microblog</title>
    </head>
    <body>
        <h1>Hello, {{ data.user }}!</h1>
                <p>Tu es connecté de la machine : {{ data.machine }}</p>
    </body>
</html>

Cas avec un template plus élaboré avec des appels aux librairies plateform (pour OS local) et netifaces (pour interfaces réseau)
On rajoute :

import platform
import netifaces

    data = {
      'user': 'Xavki',
      'machine': platform.node(),
      'os': platform.system(),
      'dist': platform.linux_distribution(),
      'interfaces': netifaces.interfaces()
    }

Et dans le template html :

    <p>Machine : {{ data.machine }}</p>
    <p>OS : {{ data.os }}</p>
    <p>Distribution : </p>
    {% for elem in data.dist %}
        <p style="padding-left:20px">- {{ elem }}</p>
    {% endfor %}
    <p>Interfaces : </p>
    {% for inter in data.interfaces %}
        <p style="padding-left:20px">- {{ inter }}</p>
    {% endfor %}

Mode développement pratique pour gérer les modifs en direct et l'accès au mode débug en console :

export FLASK_ENV=development

ou ajouter un .env contenant FLASK_ENV=development

Et indiquer dans le script python :

from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())

Créer obligatoirement un dossier “static” pour y mettre les images ou css et utiliser (à importer en en-tête)

urf_for('static',filename="nom_fichier")

Autre méthodes de Flask :

abort : pour retourner un code d'erreur HTTP personnalisé (404, 403, 401…)

redirect : pour rediriger vers une page

os.walk(dossier_a_parcourir)
Renvoie : parent, listedossiers (dnames), listefichiers (fnames)

os.path.join(parent,nomfichier)

  • technique/python/flask.1581033479.txt.gz
  • Dernière modification : 2020/04/11 02:26
  • (modification externe)