Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Projet domotique avec cherrypy : afficher des informations sur une seule interface web.

0 votes

Je suis sur un projet domotique qui regroupe un certain nombre de modules (commande de lampes, détection de mouvement, flux vidéo, détection d'ouverture de portes etc). Tout mes scripts ayant été écrit en python, mon choix a été porté sur cherrypy pour la partie web (la vraie raison étant que je ne connais pas bien le PHP). Je voudrais donc construire une interface web, avec cherrypy, qui va servir de tableau de bord pour piloter les différents modules. J'arrive bien à appeler mes fonctions depuis l'interface, mais le traitement retour est à chaque fois retourné sur une nouvelle page HTML générée, et non sur mon tableau de bord comme je le voudrais.
Plus concrètement, voici un code minimal pour expliciter mon problème :

<form method="get" action="affiche">
<button type="submit" >cliquez ici</button>

Ceci est un extrait de mon code HTML qui affiche un bouton chargé d'appeller la fonction "affiche" lorsqu'on clique dessus.

class principal(object):

    @cherrypy.expose
    def index(self):
        return open('MonSite.html')

    @cherrypy.expose
    def affiche(self):
        return """ <h1> LE BOUTON MARCHE BIEN </h1> """

if __name__ == '__main__':
    cherrypy.quickstart(principal(), '/', config)

ensuite il y a mon code python-cherrypy qui récupère mon fichier HTML et le rend accessible depuis un navigateur. Il contient une fonction "affiche" qui est appelée lorsqu'on clique sur le bouton et retourne un texte : "LE BOUTON...".
À ce niveau ce que je veux c'est que ce texte soit affiché sur la page principale du site (le fameux index) mais ce qui se passe c'est que mon texte est retourné sur une nouvelle page, avec l'URL qui change en: 127.0.0.1:8080/affiche.

La question est donc : comment faire pour que le résultat (mon texte dans ce cas de figure) soit affiché sur ma page principale ?

demandé 12-Mai par Tobin (122 points)
edité 18-Mai par max

1 Réponse

+1 vote
 
Meilleure réponse

Il faut que tu utilises du javascript notamment l'AJAX (Asynchronous Javascript and XML), tu peux le faire simplement avec la bibliothèque JQuery(Doc vers la fonction ajax)

Pour faire simple tu peux juste créer un bouton (sans formulaire) avec une fonction javascript qui va aller requêter la page que tu souhaites (ici http://localhost:8080/affiche) et qui mettera à jour ta page web

<button onclick="requete">
Cliquez moi !
</button>

<p id="mes_donnes">
</p>

<script type="text/javascript">
    function requete()
    {
        $.ajax({
            "url": "http://localhost:8080/affiche",
            "method": "GET",
            "success": function(donnees_recues){
                $("#mes_donnes").text(donnees_recues);
            }
        });
    }
</script>

Attention à ne pas oublier d'inclure la bibliothèque JQuery.

répondu 8-Jun par Exa
sélectionné 16-Jun par Tobin

Je l'ai effectivement compris au fil de mes recherches. Cela va faire 1 mois que je me suis mis intensivement à l'étude du javascript, essentiellement l'AJAX. Mais bon, mieux vaux tard que jamais dit-on!

...