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 :

[Mod Python] passage d'arguments II


Sujet :

Réseau/Web Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut [Mod Python] passage d'arguments II
    Rebonjour,

    J'ai donc reussi a passer un argument simple (un entier, l'index de mes questions) de ma fonction "login" a une autre fonction "consult_question" grace a la reponse dans ce post.

    Maintenant j'aimerais savoir si il est possible avec cette meme methode (grace a un <a href="consult_question?arg=...">) de passer des arguments qui sont des variables dans ma fonction "login"...

    Exemple, j'ai une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable = (var1,var2)
    dans la fonction "login". Comment puis-je passer "mavariable" comme argument vers la fonction "consult_question"?

    Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    A mon avis il faut "découper" le tuple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aref = "<a href=\"consult_question?arg1=%s&arg2=%s\">" % (mavariable[0], mavariable[1])

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Salut Tamiel et merci pour ta reponse. Mais malheureusement, ca n'a pas l'air de fonctionner.

    Tu as un exemple qui marche comme tu l'as ecrit?

    G.Treize

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    aref = "<a href=\"consult_question?arg1=%s&arg2=%s\">Ma Question</a>" % (mavariable[0], mavariable[1])
    req.write(aref)
    et dans le code de "consult_question" tu recuperes arg1 et arg2 .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Ah oui... mais je realise que ce que je veux faire, c'est passer,
    mavariable[:]

    si mavariable est par exemple mavariable=(1,2).

    C'est possible ca?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "consult_question?mavariable=%s" % (str(mavariable))
    et pour récupérer du côté de consult_question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable = eval(req.form["mavariable"].value)


    mais bon c'est un moyen barbare !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Ok, merci je vais essayer ca (en fait ma variable, c'est un dict tres long).

    G.

  8. #8
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    mais bon c'est un moyen barbare !
    C'est même plus que ça, c'est suicidaire!!

    Ne jamais faire d'eval sur des données utilisateurs sans les filtrer (ne jamais faire d'eval tout court d'ailleurs).

    Par pitié ne fais pas ça!!

    Pour un dict, tu pourrais faire un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lien="consult_question?" + "&".join(["%s=%s" % (k, str(v)) for k,v in mondict.items()])

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Pacificator,

    Bon, j'ai essaye, mais je crois que ca ne va pas aller. Les arguments que je veux passer sont trop longs je crois (plusieurs listes de centaines de valeurs, qui elles meme sont des listes).

    Comme je suis habitue au C/C++, je raisonne par pointeurs, alors que, si j'ai bien compris, c'est pas du tout comme ca qu'il faut reflechir.

    Par exemple (la y'en a que 11, mais a priori il ca pourrait etre 10000):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{'tag_set_qid': 0, 'tag_set': [70, 0]}, {'tag_set_qid': 1, 'tag_set': [70, 1]}, {'tag_set_qid': 2, 'tag_set': [70, 1]}, {'tag_set_qid': 3, 'tag_set': [1]}, {'tag_set_qid': 4, 'tag_set': [1]}, {'tag_set_qid': 5, 'tag_set': [1]}, {'tag_set_qid': 6, 'tag_set': [1]}, {'tag_set_qid': 7, 'tag_set': [1]}, {'tag_set_qid': 8, 'tag_set': [1]}, {'tag_set_qid': 9, 'tag_set': [1]}, {'tag_set_qid': 10, 'tag_set': [1]}]
    ...si vous avez des commentaires. Mais en attendant, je vais essayer de mieux comprendre le fonctionnement des appels de fonction.

    La methode que j'utilise pour le moment, c'est de declarer mes variable en global (je sais, c'est mal... )

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Oui le eval c'est vraiment @#!%

    Après j'ai du mal à comprendre pourquoi tu veux passer autant de donner en paramètres.

    Est ce que tu pourrais nous donner + d'infos sur l'objectif de ton code ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Le code est un systeme client-serveur web qui a simplement pour but de permettre de voter sur des questions posees par les utilisateurs (principe de democratie directe).

    Ces questions sont stockees sur le serveur dans une BDD. Chaque utilisateur doit se connecter au serveur. Apres, il doit pouvoir consulter lesdites questions, lire les reponses, proposer eventuellement d'autres questions ou d'autres reponses, et enfin il doit pouvoir voter. J'aimerais que chacune de ces etapes se fasse sur une page web separee, question de lisibilite.

    Pour interagir avec le serveur, on a choisi d'utiliser Python et le protocole XML-RPC.

    Pour minimiser les appels au serveur, je recupere un max de donnees au debut, et j'aimerais donc que ces donnees (questions/reponses/infos diverses..) soient accessibles partout dans mon code.

    Comme j'ai dit, je viens du C/C++, donc pour moi faire des fonctions pour a peu pres n'importe quoi, c'est naturel... et dans mon esprit passer des arguments entre fonctions c'est naturel... mais apparemment pas en Python.

    Donc si vous avez une methode generale pour gerer ce genre de code (=comment je dois organiser mon code), n'hesitez pas a m'en faire part (je rappelle que je suis tres debutant en "web programming").

    Merci.

    G.13

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Je ne pense pas qu'extraire toutes les questions/réponses à l'ouverture de session de l'utilisateur soit une bonne idée car imagine si tu as 20000 questions/réponses, le temps pour ouvrir cette session ....

    Simplement, j'aurais fait une table questions/reponses par thématique par exemple.

    Et lorqu'un utilisateur consulte cette thématique, je récupère ma liste de questions à ce moment là.


    Pour résumé avec xmlrpc :

    Utilisateur --> [xmlrpc] recuperer liste thematiques -> Serveur
    Serveur -> [xmlrpc] envoie liste thematiques -> Utilisateur
    Utilisateur -> [xmlrpc] Choix d'une thématique -> Serveur
    Serveur -> [xmlrpc] Envoi liste questions -> Utilisateur
    Utilisateur -> [xmlrpc] Repondre à une question -> Serveur
    Serveur -> [xmlrpc] Donner reponse -> Utilisateur

    ... etc


    Enfin c'est un schéma basique vite fait

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Ok, merci pour ces conseils.

    Est-ce que l'utilisation de "sessions" pourrait aussi me permettre de minimiser les appels au serveur et a sauvegarder des donnees localement? (j'ai vaguement vu ca dans la documentation)

    Merci.

    Gorgo T.

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Avec les sessions en effet tu peux stocker des informations en mémoire ou dans une base (dbm, fichier) .

    http://www.modpython.org/live/curren...yapi-sess.html


    Je suppose que ton architecture logicielle sera dans ce cas :

    Navigateur Web <---> Apache/ModPython <--> XmlRPC <---> Bdd
    (Utilisateur)

    ce qui peut être simplifié en enlevant xmlrpc (qui ne fait qu'un intermédiaire inutile entre code server et bdd)


    Si tu veux faire :
    Interface Utilisateur <-----> XmlRPC <-----> Bdd

    là tu sors du contexte de mod_python et du coup les sessions ne sont plus applicables.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Ok, je vais me documenter sur le sujet.

    Autrement, je ne desire pas supprimer un des niveaux que tu as schematise. La raison principale etant que la communication avec le serveur par XML-RPC est deja completement codee et documentee.

    Voila, merci encore... mais je ne doute pas avoir d'autres questions a poser incessamment sous peu

Discussions similaires

  1. [Mod Python] passage d'arguments
    Par Gorgo13 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 20/10/2007, 16h47
  2. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  3. [TASM] Passage d'argument à une macro
    Par sorry60 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/04/2005, 18h22
  4. [web] passage d'arguments à un CGI
    Par ma2th dans le forum Web
    Réponses: 4
    Dernier message: 20/08/2004, 12h18
  5. passage d'argument à la procédure main ()
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 01/09/2003, 19h59

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