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, html, cherrypy


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Points : 47
    Points
    47
    Par défaut python, html, cherrypy
    Bonjour!

    J'ai une petite erreur qui me casse la tete depuis un grand moment, je n'arrives pas à trouver la solution et je me suis retourner en vers vous pour me sauver.

    Alors, j'ai un formulaire en Html :

    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
    #####
    [*ajout_emploi*]
    <div class="contenu_enreg">
        <div><img src="annexes/vide.png"></div> 
        <form class="box1 login" method="post" action="ajouterEmploi"> 
        <img src="annexes/vide.png">
        <p>%s</p><br/> 
            <fieldset class="boxBody">
              <label>Nom de la classe</label> <select name="nomc" required>%s</select> 
    	  <label>Jour</label> <select name="jour" required>
    		<option>Lundi</option>
    		<option>Mardi</option>
    		<option>Mercredi</option>
    		<option>Jeudi</option>
    		<option>Vendredi</option>
    		<option>Samedi</option>
    </select> 
              <label>7h:30-8h:20</label> <input type="text" name="heur1" value ="%s" class="only_alpha_num" required>                          
              <label>8h:20-9h:20</label> <input type="text" name="heur2" value ="%s" class="only_alpha_num" required>
    	  <label>9h:20-10h:10</label> <input type="text" name="heur3" value ="%s" class="only_alpha_num" required> 
    	  <label>10h:10-11h:05</label> <input type="text" name="heur4" value ="%s" class="only_alpha_num" required>
    	  <label>11h:05-11h:30</label> <input type="text" name="heur5" value ="%s" class="only_alpha_num" required>
    	  <label>11h:30-12h:20</label> <input type="text" name="heur6" value ="%s" class="only_alpha_num" required> 
    	  <label>12h:20-13h:15</label> <input type="text" name="heur7" value ="%s" class="only_alpha_num" required> 
     	  <label>13h:15-14h:00</label> <input type="text" name="heur8" value ="%s" class="only_alpha_num" required>
    	  <label>14h:00-15h:00</label> <input type="text" name="heur9" value ="%s" class="only_alpha_num" required>
     	  <label>15h:00-16h:00</label> <input type="text" name="heur10" value ="%s" class="only_alpha_num" required>
    	  <label>16h:00-17h:00</label> <input type="text" name="heur11" value ="%s" class="only_alpha_num" required>                      
            </fieldset>      
            <footer>                    
             <input type="reset" class="btnReset" value="Effacer">
              <input type="submit" class="btnLogin" value="Inserer">              
            </footer>
        </form>            
    </div>
    et une fonction python qui me permet d'inserer dans la base mysql.
    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
    def ajouterEmploi(self,nomc="",jour="",heur1="",heur2="",heur3="",heur4="",heur5="",heur6="",heur7="",heur8="",heur9="",heur10="",heur11=""):    
            print(nomc)
            if(cherrypy.session.has_key("nom") and cherrypy.session.has_key("priorite")):
                if(cherrypy.session["nom"] != ""):
                    emp = Emploi(nomc,jour,heur1,heur2,heur3,heur4,heur5,heur6,heur7,heur8,heur9,heur10,heur11)
                    emp.ajoutBD()  
                    print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaj")
                    print(nomc)
                    #if(existEmploi(nomc,jour)==1):
                    if(int(cherrypy.session["priorite"]) == 20):
                        return self.accueil_Admin((Glob.html["acceuilAdministrateur"])%(Glob.html["stat"], Glob.html["groupe"],cherrypy.session["nom"], (Glob.html["ajout_emploi"])%("",listeDesClasse(),"","","","","","","","","","","")))
                    else:
                        return self.accueil_Administrateur()
                    #else:   
                       # emp.ajoutBD()  
                       # if(int(cherrypy.session["priorite"]) == 20):
                          #  return self.accueil_Admin((Glob.html["acceuilAdministrateur"])%(Glob.html["stat"], Glob.html["groupe"],cherrypy.session["nom"], (Glob.html["notification1"])%"Une journée d'emplois ajouté avec cuccès"))             
                        #else:            
                          #  return self.accueil_Admin((Glob.html["acceuilAdministrateur"])%("", "",cherrypy.session["nom"], (Glob.html["notification1"])%"Une journée d'emplois ajouté avec cuccès"))             
                else:
                    return self.accueil_Administrateur()
            else: 
                return self.accueil_Administrateur()
        ajouterEmploi.exposed =True
    Mais ça m'affiche cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line 656, in respond
        response.body = self.handler()
      File "/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
        self.body = self.oldhandler(*args, **kwargs)
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line 34, in __call__
        return self.callable(*self.args, **self.kwargs)
      File "acceuil.py", line 1249, in ajouterEmploi
        emp.ajoutBD()
      File "/home/brahim/Bureau/workspace_cherrypy/Emploi.py", line 27, in ajoutBD
        id_class = row[0]
    TypeError: 'NoneType' object has no attribute '__getitem__'
    Remarques:
    Quand je teste à savoir l'erreur, j'ai remarqué que il n'arrive pas à recuperer les valeurs des champs.

    ça me depasse enormement, SVP si quelqu'un a idée jeter un coup d'oeil de me depanner.
    Je suis sûr que j'aurai une solution car j'ai trouvé beaucoup d'aide à partir de ce forum.
    Merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    J'attends toujours vos reponses.

    Je precise encore que l'erreur est bien de la recuperation des valeurs de champs. et parfois ça pas aussi et la plus part ne passe pas.

    Si quelqu'un m'explique bien la cause aussi tres interessant.

    Merci d'avance.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Sans montrer ce que fait emp.ajoutBD(), vous voulez qu'on devine?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    Bonjour!
    vous avez raison, seulement que je n'ai pas fait attention.

    voila ce que fait la fonction emp.ajoutBD()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def ajoutBD(self):
            conn = connexionBD()
            cursor = conn.cursor () 
            cursor.execute("SELECT idClass FROM classe where nomClass= %s", self.__nomClass )
            row = cursor.fetchone() 
            id_class = row[0]     
            cursor.execute("""INSERT INTO emploi_du_temps (idClass,jour,7h30,8h20,9h20,10h10,11h05,11h30,12h20,13h15,14h00,15h00,16h00 ) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (id_class,self.__jour,self.__heur1,self.__heur2,self.__heur3,self.__heur4,self.__heur5,self.__heur6,self.__heur7,self.__heur8,self.__heur9,self.__heur10,self.__heur11))   
            cursor.close() 
            conn.commit() 
            conn.close()

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le cursor.execute me semble bizarre. Il me semble qu'il faut utiliser:

    soit (avec un éventuel problème de sécurité (injection)):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("SELECT idClass FROM classe where nomClass= %s" % (self.__nomClass,))
    soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("SELECT idClass FROM classe where nomClass=?", self.__nomClass)
    Mais pas un mélange des 2.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    salut tyrtamos!

    j'ai tenu compt de vos remarques mais le probleme persiste toujours.

    Par ailleurs j'ai constaté la valeur de self.__nomClass me renvoi nul pourtant c'est un champs select.

    Apparement le probleme se trouve à se niveau. Tantdisque j'ai d'autres script semblable qui marche sans probleme.

    Merci à votre aide.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Tout ce qu'on peut dire c'est que l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "/home/brahim/Bureau/workspace_cherrypy/Emploi.py", line 27, in ajoutBD
        id_class = row[0]
    TypeError: 'NoneType' object has no attribute '__getitem__'
    signifie que le .fetchone ne retourne rien.
    Et donc que "cursor.execute("SELECT idClass FROM classe where nomClass= %s", self.__nomClass )" ne trouve pas ce qu'il est suppose trouver.

    Par ailleurs j'ai constaté la valeur de self.__nomClass me renvoi nul pourtant c'est un champs select.

    Apparement le probleme se trouve à se niveau. Tantdisque j'ai d'autres script semblable qui marche sans probleme.
    self.__nomClass est initialise par votre code, s'il est "None", c'est que ca n'a pas fait ce que vous attendiez bien avant le bout de code que vous montrez.

    En gros votre code fait pleins d’hypothèses qui ne sont pas toujours vérifiées et ça plante...

    C'est le gros soucis des bouts de code qu'on copie de droite a gauche sans trop savoir comment ils fonctionnent ni faire des tests unitaires avant de les intégrer.

    @tyrtamos
    La DBAPI supporte 5 paramstyle: %s est "licite" pour autant que le driver (et le SGDB le supportent).
    %s correspondant au "ANSI C printf format codes", ca fait du sens de ne pas passer un tuple dans ce cas la.
    Mais je n'ai jamais bosse avec un driver DBAPI qui supporte ce paramstyle: Microsoft SQL?

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

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Petit complément concernant les paramstyles.

    J'utilise souvent le pilote 'sqlite3', et j'essaie de n'utiliser que la méthode recommandée par la doc (pour des raisons de sécurité), donc avec '?'.

    Mais ça ne marche que pour les données: ça ne marche pas pour les instructions SQL (si on veut ajouter un "WHERE ..." par exemple ou paramétrer un nom de table).

    Ainsi, si on veut faire des remplacements complexes, il faut quelquefois avoir les 2 méthodes en même temps: avec '?' et avec '%'. Mais le "en même temps" ne signifie pas "mélangées". Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curseur.execute("""...%s...?,?,? """ % instructionsql, (var1, var2, var3))
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. python, html et matplotlib
    Par koreimy dans le forum Général Python
    Réponses: 4
    Dernier message: 08/11/2013, 15h02
  2. html, python et cherrypy
    Par koreimy dans le forum Général Python
    Réponses: 6
    Dernier message: 22/10/2013, 14h21
  3. python et cherrypy
    Par koreimy dans le forum Général Python
    Réponses: 1
    Dernier message: 29/08/2013, 11h57
  4. Python/HTML dans le navigateur
    Par Luke spywoker dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 27/10/2010, 17h43

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