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 :

[Python 2.6] BaseHTTPRequestHandler Dynamic response


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut [Python 2.6] BaseHTTPRequestHandler Dynamic response
    Bonjour,

    je souhaite renvoyer des informations à mon client en fonction de sa requête un peu comme le fonctionnement du site suivant.

    http://blog.arnaud-k.fr/2010/09/14/t...erche-en-ajax/

    Avec la librairie BaseHTTPRequestHandler j'ai trouvé comment répondre en html ou en effectuant une redirection d'url mais pas réussi en renvoyant uniquement une information.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    //connexion à la base de données 
    define('DB_NAME', 'nom_de_la_base');
    define('DB_USER', 'nom_utilisateur');
    define('DB_PASSWORD', 'mot_de_passe');
    define('DB_HOST', 'localhost');
     
    $link   =   mysql_connect( DB_HOST , DB_USER , DB_PASSWORD );
    mysql_select_db( DB_NAME , $link );
     
    //recherche des résultats dans la base de données
    $result =   mysql_query( 'SELECT post_title , post_date , guid
                              FROM wp_posts
                              WHERE post_status = \'publish\'
                              AND post_title LIKE \'' . safe( $_GET['q'] ) . '%\'
                              LIMIT 0,20' );
     
    // affichage d'un message "pas de résultats"
    if( mysql_num_rows( $result ) == 0 )
    {
    ?>
        <h3 style="text-align:center; margin:10px 0;">Pas de r&eacute;sultats pour cette recherche</h3>
    <?php
    }
    else
    {
        // parcours et affichage des résultats
        while( $post = mysql_fetch_object( $result ))
        {
        ?>
            <div class="article-result">
                <h3><a href="<?php echo $post->guid; ?>">< ?php echo utf8_encode( $post->post_title ); ?></a></h3>
                <p class="date"><?php echo $post->post_date; ?></p>
                <p class="url"><?php echo $post->guid; ?></p>
            </div>
        <?php
        }
    }
     
    /*****
    fonctions
    *****/
    function safe($var)
    {
    	$var = mysql_real_escape_string($var);
    	$var = addcslashes($var, '%_');
    	$var = trim($var);
    	$var = htmlspecialchars($var);
    	return $var;
    }
    ?>
    Le code php suivant permet de renvoyer des informations, savez vous comment puis je renvoyer l'information en python (avec uniquement les librairies de bases de python 2.6)

    Je me suis penché sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return self.response.out.write(form["quest"].value)
    Mais je rencontre l'erreur suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: myHandler instance has no attribute 'response'
    Code actuel qui n'est qu'une suite de test uniquement...
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #!/usr/bin/python
    from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
    from os import curdir, sep, path
    import cgi
     
    PORT_NUMBER = 36654
     
    #This class will handles any incoming request from
    #the browser 
    class myHandler(BaseHTTPRequestHandler):
     
    	#Handler for the GET requests
    	def do_GET(self):
    		print "do_GET"
    		print self.path
    		if self.path=="/":
    			self.path="/index_example3.html"
     
    		try:
    			#Check the file extension required and
    			#set the right mime type
     
    			sendReply = False
    			if self.path.endswith(".html"):
    				mimetype='text/html'
    				sendReply = True
    			if self.path.endswith(".jpg"):
    				mimetype='image/jpg'
    				sendReply = True
    			if self.path.endswith(".gif"):
    				mimetype='image/gif'
    				sendReply = True
    			if self.path.endswith(".js"):
    				mimetype='application/javascript'
    				sendReply = True
    			if self.path.endswith(".css"):
    				mimetype='text/css'
    				sendReply = True
     
    			if sendReply == True:
    				#Open the static file requested and send it
    				f = open(curdir + sep + self.path) 
    				self.send_response(200)
    				self.send_header('Content-type',mimetype)
    				self.end_headers()
    				self.wfile.write(f.read())
    				print "Chargement 1"
    				f.close()
    			return
     
    		except IOError:
    			self.send_error(404,'File Not Found: %s' % self.path)
     
    	#Handler for the POST requests
    	def do_POST(self):
    		if self.path=="/send":
    			form = cgi.FieldStorage(
    				fp=self.rfile, 
    				headers=self.headers,
    				environ={'REQUEST_METHOD':'POST',
    		                 'CONTENT_TYPE':self.headers['Content-Type'],
    			})
     
    			print "Your name is: %s" % form["your_name"].value
    			self.path="/index_example5.html"
    			self.do_GET()
    			return			
    		if self.path == "/send2":
    			form = cgi.FieldStorage(
                                    fp=self.rfile,
                                    headers=self.headers,
                                    environ={'REQUEST_METHOD':'POST',
                                     'CONTENT_TYPE':self.headers['Content-Type'],
                            })
     
                            print "Your name is: %s" % form["your_name"].value
                            self.path="/index.html"
     
    			self.do_GET()
     
                            return
     
    		if self.path.startswith('/search'):
    			print 'first test'
    			form = cgi.FieldStorage(
                                    fp=self.rfile,
                                    headers=self.headers,
                                    environ={'REQUEST_METHOD':'POST',
                                     'CONTENT_TYPE':self.headers['Content-Type'],
                            })
     
    			print 'your request : {0}'.format(form["quest"].value)
    			return self.response.out.write(form["quest"].value)
     
     
    try:
    	#Create a web server and define the handler to manage the
    	#incoming request
    	server = HTTPServer(('', PORT_NUMBER), myHandler)
    	print 'Started httpserver on port ' , PORT_NUMBER
     
    	#Wait forever for incoming htto requests
    	server.serve_forever()
     
    except KeyboardInterrupt:
    	print '^C received, shutting down the web server'
    	server.socket.close()
    Merci d'avance.

    Cordialement Quentin.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par quentinb56 Voir le message
    Le code php suivant permet de renvoyer des informations, savez vous comment puis je renvoyer l'information en python (avec uniquement les librairies de bases de python 2.6)
    Votre code PHP, c'est une URL qui construit dynamiquement son contenu en exécutant, côté serveur, le code PHP qui la contient. Pour avoir une fonctionnalité équivalente avec Python, il faut utiliser un engin appelé Python Server Pages... Mais rares sont ceux qui utilisent encore ce genre de techno.
    note: Ajax c'est la modification de la page Web côté client... Un autre monde mais qui ne change pas grand chose côté serveur qui répond toujours à une requête HTTP avec une réponse HTTP.

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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Merci pour votre réponse.

    De mon côté, je travail sur un serveur (dont je n'ai pas les autorisations de mettre à jour).

    Je travail avec du python 2.6 et n'est d'autres choix que d'utiliser uniquement des librairies déjà installer (celles de python 2.6).

    Je vais regarder du côté de psp mais je ne suis pas sur que les éléments à ma disposition me permette de réaliser ce que je souhaite faire.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Vous me parlez d'une requête http, quel autre type de requête puis je recevoir de mon navigateur ? (dont je pourrais répondre avec autres choses que du http).

    L'utilisation de PSP nécessite un serveur apache ?

    Auriez vous des exemples/tutoriaux à me proposer ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par quentinb56 Voir le message
    L'utilisation de PSP nécessite un serveur apache ?

    Auriez vous des exemples/tutoriaux à me proposer ?
    Je vous ai donné une URL qui vous indique différentes bibliothèques PSP, à vous de lire les pré-requis pour les installer sur Python 2.6: comme je vous l'ai indiqué, c'est un peu dépassé et vous risquez de ne pas trouver beaucoup d'aide.
    De toutes façons entre les fonctionnalités de BaseHTTPRequestHandler et ce que vous voulez, c'est soit beaucoup de code, soit utiliser une bibliothèque.

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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Merci pour ton aide, je regarde ca de suite.

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