Executer un script python avec un boutton html [Fermé]

Signaler
Messages postés
36
Date d'inscription
samedi 12 novembre 2016
Statut
Membre
Dernière intervention
7 juillet 2019
-
Messages postés
29267
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 juillet 2020
-
Salut !

Je cherche à créer un formulaire où j'entre des données numérique et ensuite lorsque je clique sur le boutton 'submit'... ça exécute un script python qui utilise les données.

J'aimerais connaitre les méthodes possibles... merci.

1 réponse

Messages postés
29267
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 juillet 2020
6 895
Bonjour,

Il y a plusieurs écoles, voici ce qui est possible de faire (par ordre de préférence) :
  • utilise
    pycharm
    : tu programmes tout en python, et ton application s'occupe de retourner la page qui doit être traitée par le navigateur. Il est possible de facilement servir des fichiers statiques (image, css, javascript, etc...)
  • code une applet web : tu peux utiliser
    gunicorn
    +
    falcon
    mais c'est plutôt moins pratique que
    cherrypy
    .
  • installe au niveau de ton serveur web l'extension nécessaire pour lancer un cgi python
  • code ta page web normalement, et au niveau du code disons php, appelle au travers d'un appel système python et le chemin vers ton code python.


cherry_server.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# See https://docs.cherrypy.org/en/latest/tutorials.html for details

import cherrypy, os

HTML_SKEL = """
    <h1>Simple form</h1>
    <form action="/to_upper" method="post">
        <textarea id="input_text" name="input_text" rows="1" cols="80">%(input)s</textarea>

        <div id="div_input">
            <input type="submit" value="submit">
        </div>

        <div id="div_output">
            %(results)s
        </div>
    </form>
    <img width="300px" src="/static/image.jpg">
"""

def upper_fonc(s):
    return s.upper()

def make_html_page(args :dict) -> str:
    return HTML_SKEL % args

class Handler:
    @cherrypy.expose
    def index(self):
        return make_html_page(
            {
                "input"   : "some random text",
                "results" : "No result so far :)",
            }
        )

    @cherrypy.expose
    def to_upper(self, input_text = "some random text", **kwargs):
        return make_html_page(
            {
                "input"   : input_text,
                "results" : upper_fonc(input_text)
            }
        )

if __name__ == "__main__":
    conf = {
        "/": {
            "tools.sessions.on"    : True,
            "tools.staticdir.root" : os.path.abspath(os.getcwd())
        },
        "/static": {
            "tools.staticdir.on"  : True,
            "tools.staticdir.dir" : "./files"
        }
    }
    cherrypy.quickstart(Handler(), "/", conf)


Dans cet exemple :
  • l'utilisateur saisit une chaîne de caractère
  • quand il clique sur le bouton submit, celle-ci est retournée en capitale.
  • l'image dans cet exemple doit être rangée dans
    files/image.jpg
    pour s'afficher.
  • Côté navigateur : le site s'affiche en visitant
    http://localhost:8080
    , et l'image
    http://localhost:8080/static/image.jpg
    . On peut aussi accéder au site via ton adresse IP.


Bonne chance