IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lancer fonction python depuis un bouton d'une page html [Débutant(e)]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut Lancer fonction python depuis un bouton d'une page html
    Bonjour,

    Je débute et découvre le python.

    J'aimerai faire une page web très simple pour basculer les relais d'une carte.

    Pourquoi avec ce code il ne se passe rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/usr/bin/python
     
    from subprocess import call, check_output
    from bottle import route, post, request, run, FlupFCGIServer
    @route('/')
    def hello():
            return '''<form method="POST" action="/helloworld.py">
    <input name="relay_1" value="Relay 1" type="button" onclick="relay();">
                  </form>'''
     
    @post('/')
    def relay():
        out = call (["/usr/sbin/i2cset", "-y", "0", "0x21", "0x00", "0x80"])
     
    run(host='localhost', port=8080, server=FlupFCGIServer)
    Alors qu'avec celui la, ca fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/python
     
    from subprocess import call, check_output
    from bottle import route, post, request, run, FlupFCGIServer
    @route('/')
    def hello():
            return '''<form method="POST" action="/helloworld.py">
    <input name="name"     type="text" />
    <input type="submit" />
                  </form>'''
     
    @post('/')
    def login_submit():
        name     = request.forms.get('name')
        out = call (["/usr/sbin/i2cset", "-y", "0", "0x21", "0x00", name])
     
    run(host='localhost', port=8080, server=FlupFCGIServer)
    Quelqu'un pourrait m'éclairer/aider, svp?!

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    la seule différence dans ton code se situe dans call() il me semble

    j'ai pas les moyens de tester tes 2 bouts de code mais es-tu sûr que "request.forms.get('name')" donne "0x80"? N'y a-t-il pas non plus de différence de type entre ces 2 éléments (1 string et 1... )?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Bah le name c'est un champ texte dans lequel pour le test j'écris 0x80.

    Donc logiquement c'est pareil

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    L'erreur ne se situe pas là.

    Dans ton premier exemple, ton bouton défini par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input name="relay_1" value="Relay 1" type="button" onclick="relay();">
    ne soumet pas le formulaire, rien n'est renvoyé en POST à ton serveur, donc ta fonction relay n'est pas appelée.

    le onclick="relay();" ne fait qu'appeler une fonction javascript si elle est chargée avec la page. Tu ne peux pas appeler une fonction serveur depuis ton navigateur de cette manière.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Et du coup comment faire sans utiliser un bouton submit comme le 2e exemple?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Logiquement tu dois passer par une soumission de formulaire, qui fera un appel au serveur.

    Sinon suivant tes besoins, tu peux effectuer cette requete au serveur via un appel ajax, mais ça devient beaucoup plus compliqué.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Oui justement je voudrais pas faire trop compliqué car mes besoins sont minimes et que je débute dans ces langages.

    Un soumission de formulaire se fait seulement par un bouton submit?!

    Si oui, ca veut dire que je dois créé autant de bouton submit que j'ai de relais à faire basculer?!

    Ps: désolé si mes questions paraissent betes mais je suis un peu dans le flou

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Tu peux aussi utiliser des moyens détournés en javascript pour soumettre ton formulaire, mais c'est vraiment se prendre le chou pour pas grand chose.

    L'input "submit" est le moyen standard pour soumettre son formulaire. Et si tu es débutant, contente toi de cela pour le moment, tu t'éviteras des maux de tête

    Edit :

    Si tu as plusieurs opérations à faire, dans ce cas, utilise plusieurs champs dans ton formulaire pour identifier les relais à basculer. Des boutons radio seraient adaptés par exemple.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Je te remercie pour cet éclaircissement.

    Je vais continuer avec les submit (ca marchait comme ca) en ésperant arriver au résultat souhaité et peut etre tenter avec les boutons radios (+ un submit je suppose).

    A voir.

    J'y vais un peu plus clair, je te remercie une nouvelle fois.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage ou non d'un bouton dans une page HTML
    Par forsay1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/09/2014, 15h29
  2. [XL-2010] Cliquer sur un bouton d'une page HTML
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/05/2013, 21h43
  3. Réponses: 4
    Dernier message: 21/11/2011, 10h42
  4. Réponses: 4
    Dernier message: 24/08/2007, 15h56
  5. Réponses: 6
    Dernier message: 12/06/2006, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo