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

Réseau/Web Python Discussion :

requete ajax serveur python [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut requete ajax serveur python
    Bonjour bonjour,
    J'aimerai pouvoir échanger entre mon javascript et mon python. Par exemple le javascript envois l'entier 2 et 3 et le python lui renvois 5 (je sais que c'est faisable en js directement^^ mais c'est aps ce que je veux)
    Avec ce que j'ai trouvé (je me trompe peut être) il faut utiliser des requetes ajax (avec le format json pour compliquer le truc^^)

    Voici mon fichier côté client (je pense qu'il est juste), dans mon exemple le client appuye sur un bouton et le texte du span change grace au texte envoyé par le serveur python:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Test CLEM clem</title>
            <script type="text/javascript">
              $("#UID_boutonTest").click(function()
              {
                $.ajax(
                {
                  type : 'GET' // Le type de la requête HTTP.
                  url : '/home/myUserName/Bureau/MonServeurPython/serveur.py', // La ressource ciblée
                  dataType:'json',
                  data    : JSON.stringify( { "messageClient" : "RecoisTuPetitServeur" } ),
                  success : function(data)
                  {
                    if (data !=null)
                    {
                      messageServeur=data.messageServeur;
                      $('#UID_afficheTest').val(messageServeur);
                      document.getElementById('UID_afficheTest').innerHTML = messageServeur;
                    }
                  }/*success : function() {}*/
                });/*$.ajax*/
              });
            </script>
        </head>
        <body>
            <button id="UID_boutonTest" style='left:50px;height:50px;width:200px;'>clickServeur</button>
            <span id="UID_afficheTest"style='text-align: center;'>MESSAGEDUSERVEUR</span>
        </body>
    </html>
    Et côté serveur je bloque je ne sais pas quoi mettre dans mes methodes pour qu'elles retournent soit la page index.html (sinon comment je click sur mon bouton^^) et une pour renvoyer quelque chose.
    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
     
    import http.server
    from http.server import HTTPServer
    from http.server import SimpleHTTPRequestHandler
     
     
    class RequestHandler(SimpleHTTPRequestHandler):
      def do_GET(self):
        print("stp envois ma page html serveur")
     
      def reponse_serveur(self):
        print("j'aimerai recevoir et repondre a ma requete ajax ici")
     
    serveraddr = ('', 8765)
    srvr = HTTPServer(serveraddr, RequestHandler)
    srvr.serve_forever()
    Je suis complètement dans le flou merci du fond du coeur

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    aille il me semblait que c'était compliqué ... ^^

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Salut,

    Citation Envoyé par mopi42 Voir le message
    aille il me semblait que c'était compliqué ... ^^
    Le plus compliqué est de savoir quoi vous répondre sans vous choquer.

    Le caractère AJAX d'une requête n’intéresse que le client. Elle permet au navigateur Web la mise à jour du document HTML qui est affiché et rendre l'interface présentée plus réactive.
    La seul chose qu'en verra, de son côté, le serveur Web sera la requête HTTP.
    Mais vous réalisez sans doute que cette requête HTTP là est associée à la page HTML affichée.
    Elle peut avoir un contexte (donné par l'application Web) et un état (liée à la session utilisateur).

    Pour rendre compte de ces abstractions là, la classe SimpleHTTPRequestHandler est bien trop limité: on préférera utiliser des frameworks plus ou moins compliqués els flask, webpy, pyramid, django,...
    Effectivement, sans savoir à quoi ressemble une application Web, les abstractions qu'ils définissent sont difficiles à comprendre et à maîtriser.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    merci pour votre réponse.
    J'utilise actuellement le framework django pour un autre projet, je me rend donc compte des difficultés de sessions ce n'est pas mon problème ici.
    En effet, je n'ai pas besoin de base de données, pas de session, rien de tout çà.
    En fait, mon projet est simple,
    J'aimerai faire des courbes graphiques en utilisant une bibliothèque javascript.
    J'aimerai tracer des courbes à partir de fichiers csv.
    la bibliothèque javascript demander d'avoir les données sous la forme ["donnee1","donnee2",...]
    Du coup, j'aimerai gérer le formatage en python car j'ai déjà fait un script qui ouvre un fichier csv et formate bien les donnes comme le demande la bibliothèque js.
    Je peux donc pouvoir juste envoyer cette "liste" au javascript...
    En gros c'est une sorte de logiciel mais en fait c'est un site web (je vais cacher les bandes menus de firefox pour que le client ne s’aperçoive pas que c'est du web.
    Suis je claire? désolé si c'est dur à comprendre.
    Mais pour résumer, je veux juste pouvoir envoyer des données de python à javascript.
    Merci

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Citation Envoyé par mopi42 Voir le message
    la bibliothèque javascript demander d'avoir les données sous la forme ["donnee1","donnee2",...]
    Du coup, j'aimerai gérer le formatage en python car j'ai déjà fait un script qui ouvre un fichier csv et formate bien les donnes comme le demande la bibliothèque js.
    Je peux donc pouvoir juste envoyer cette "liste" au javascript...
    Créer un service Web qui retourne un tableau sous forme JSON lorsqu'il reçoit une requête HTTP n'est pas très compliqué.
    Le soucis sera d'en faire une requête AJAX dans le même domaine/sous-domaine que le document DOM chargé dans le navigateur.
    Si vous ne comprenez pas le "soucis", vous prenez un serveur Web comme flask ou Webpy et farfouillez pour trouver des tutos qui montrent comment çà se met en place: une dizaine de lignes de code.
    Si vous avez l'ambition de refaire tout ou partie de ce que font ces serveur Web au delà de SimpleHTTPRequestHandler, je n'ai pas l'impression que vous réalisiez le "gap" que çà représente.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci encore pour votre réponse.
    J'espère que je ne parais pas prétentieux, car au contraire, je débute dans le web donc je ne connais pas tous les mécanismes.
    Du coup pour pouvoir échanger un tableau (par exemple) entre mon serveur python et mon fichier javascript vous me conseillez d'utiliser flask ou webpy ce sera réalisable? Pouvez vous m'orienter vers le plus facile j'aimerai bien arriver à un résultat dans la journée car je désespère là :S (c'est frustrant d'avoir un script python qui formate bien mes fichiers csv, d'avoir un fichier javascript qui crée des courbes tout seul grace à la bibliothèque mais de ne pas arriver à faire discuter les 2 ensembles...)
    Merci beaucoup en tout cas !

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    hello,

    à tout hasard, regarde si l'exemple how-to-perform-ajax-in-flask-for-python ne peut pas t'aider. Tu peux même sur ce site exécuter le code pour voir ce que cela donne.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Salut,

    A vous de choisir! Si vous n'êtes pas obligé de comprendre comment ils fonctionnent, vous devez quand même comprendre ce que raconte la documentation pour arriver à faire ce que vous voulez. Et si vous débutez, il y des documentations qui vous seront plus accessibles que d'autres (à cause de votre histoire/connaissances).
    Si je prends les tutos pas trop degueu qui remontent via çà donne Flask, WebPy.

    c'est frustrant d'avoir un script python qui formate bien mes fichiers csv, d'avoir un fichier javascript qui crée des courbes tout seul grâce à la bibliothèque mais de ne pas arriver à faire discuter les 2 ensembles...
    Ah ben, si vous étiez resté dans le monde Python, vous seriez allé voir du côté de matplotlib. Vous auriez trouvé comment afficher les graphiques générés côté serveur sur un browser. Vous auriez aussi pu regarder mpld3 intégré à ipython notebook. Vous avez aussi un Canvas HTML5 qui interagit avec matplotlib.

    Dommage de n'utiliser Python que pour lire des fichiers CSV.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses, çà va me permettre d'avancer
    J'avais pensé à matplotlib mais je trouve çà vraiment pas très beau graphiquement comme rendu final. Quand on regarde highchart en javasript c'est vraiment le top je trouve...
    Merci en tout cas je reviens vous embêter si je n'y arrive pas, mais je m'orienterai plutôt sur un forum flask du coup.
    Merci beaucoup

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    hello,
    je suis reparti de ton exemple pour la page html que j'ai modifiée comme ceci :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Test CLEM clem</title>
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
            <script type="text/javascript">
            $(function() {
              $("#UID_boutonTest").click(function()
              {
               $.getJSON('/_get_message', {
               param: $("#UID_boutonTest").text()
            }, function(data) {
              $("#UID_afficheTest").text(data.result);
            });
            return false;
              });
            });
            </script>
        </head>
        <body>
            <button id="UID_boutonTest" style='left:50px;height:50px;width:200px;'>clickServeur</button>
            <span id="UID_afficheTest"style='text-align: center;'>MESSAGEDUSERVEUR</span>
        </body>
    </html>
    j'ai donc rajouté jquery pour pouvoir utiliser getJSON pour la requête AJAX et j'envoie en paramètre le texte du bouton pour la fonction _get_message .

    De l'autre côté pour le serveur flask que j'ai mis sur le port 8090 , j'ai le code suivant :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    from flask import Flask, render_template, request, jsonify
    # Initialize the Flask application
    app = Flask(__name__)
     
    # This route will show a form to perform an AJAX request
    # jQuery is loaded to execute the request and update the
    # value of the operation
    @app.route('/')
    def index():
        return render_template('index.html')
     
    # Route that will process the AJAX request, sum up two
    # integer numbers (defaulted to zero) and return the
    # result as a proper JSON response (Content-Type, etc.)
    @app.route('/_add_numbers')
    def add_numbers():
        a = request.args.get('a', 0, type=int)
        b = request.args.get('b', 0, type=int)
        return jsonify(result=a + b)
     
    # sur requete AJAX _get_message on renvoie le texte   
    # je suis la réponse ajax du serveur à + le paramètre transmis  
    @app.route('/_get_message')
    def get_message():
        param = request.args.get('param', 'pas de param', type=str)
        return jsonify(result='je suis la réponse ajax du serveur à ' + param)
     
    if __name__ == '__main__':
        app.run(
            host="0.0.0.0",
            port=int("8090"),
            debug=True
        )
    le fichier index.html est à placer dans le répertoire templates à l'endroit où l'on lance le serveur flask :
    jurassic@jurassic-VN433:~/projets_python/test_flask$ sudo python3 app.py
    * Running on http://0.0.0.0:8090/
    * Restarting with reloader
    127.0.0.1 - - [01/Feb/2015 02:21:10] "GET / HTTP/1.1" 200 -
    127.0.0.1 - - [01/Feb/2015 02:21:14] "GET /_get_message?param=clickServeur HTTP/1.1" 200 -
    Quand je clique sur le bouton clickServeur j'ai bien le message je suis la réponse ajax du serveur à clickServeur qui apparaît sur la page html

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Quand je clique sur le bouton clickServeur j'ai bien le message je suis la réponse ajax du serveur à clickServeur qui apparaît sur la page html
    Ah ben oui, c'est toujours plus simple quand on utilise un outil adapté à la situation (même quand on ne comprends pas trop ce qu'il fait).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    merci pour ton aide j'y suis arrivé aussi de mon côté avec flask.
    J'ai utilisé une requête ajax comme prévu (je ne connais la diférence avec toi qui utilise .getJSON) mais bon çà marche
    Merci beaucoup à tous vous n'imaginez pas comme çà fait du bien quand çà fait un mois qu'on y arrive pas.
    J'espère qu'un jour je serais aussi bon que vous et que je pourrai vous aider mais j'en doute ^^

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

Discussions similaires

  1. [AJAX] Requete AJAX lente sur serveur OVH
    Par rere02 dans le forum AJAX
    Réponses: 6
    Dernier message: 23/03/2013, 18h36
  2. Requete AJAX sur serveur exterieur.
    Par ABandApart dans le forum jQuery
    Réponses: 2
    Dernier message: 19/09/2010, 22h37
  3. requete ajax sur un serveur web en java depuis php
    Par enzostar dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 29/03/2010, 14h59
  4. [AJAX] Requete ajax vers serveur
    Par knebhi dans le forum AJAX
    Réponses: 2
    Dernier message: 23/03/2010, 17h24
  5. Réponses: 2
    Dernier message: 03/08/2009, 15h11

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