Executer un script python avec un boutton html

Fermé
muramasakatana Messages postés 36 Date d'inscription samedi 12 novembre 2016 Statut Membre Dernière intervention 7 juillet 2019 - Modifié le 17 juil. 2019 à 11:31
mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 - 17 juil. 2019 à 11:39
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

mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748
Modifié le 17 juil. 2019 à 11:41
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
1