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 :

Bottle, template et method post


Sujet :

Réseau/Web Python

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Points : 138
    Points
    138
    Par défaut Bottle, template et method post
    Bonjour à tous.

    Je viens vous voir car j'ai un soucis de compréhension sur le plugin bottle. En effet, j'arrive à récupérer des valeurs en posts et j'arrive à créer des pages web avec des templates. Mon soucis est que je n'arrive pas à faire fonctionner les deux en même temps, j'ai soit une erreur 500, soit une erreur 405 dans mes tests.

    Voilà le code que j'ai écris :

    start.py
    Code python : 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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from bottle import Bottle, run, view, request, post
     
    app = Bottle()
     
     
    @app.route('/', method='POST')
    @view('test')
    def hello():
        if request.forms.get('username') and request.forms.get('password'):
            username = request.forms.get('username')
            password = request.forms.get('password')
        else:
            username = None
            password = None
     
        return dict(username=username, password=password)
     
    run(app, host='0.0.0.0', port=8080, server='cherrypy')

    Et voilà mon template :

    test.tpl

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form action="/" method="POST">
        Username: <input name="username" type="text" />
        Password: <input name="password" type="password" />
        <input value="Login" type="submit" />
    </form>
    %if username:
        <p>{{username}}</p>
    %end
    %if password:
        <p>{{password}}</p>
    %end

    Avec ça j'ai une erreur 405 "method not allowed", mais je ne comprend pas pourquoi.

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Points : 42
    Points
    42
    Par défaut
    Salut,

    Il faut que tu crées aussi une méthode GET pour la meme route "/".
    Sinon, quand tu vais là avec ton navigateur, il ne sait pas comment traiter cette requete GET, d'ou 405 "method not allowed".

    http://bottlepy.org/docs/dev/tutoria...equest-methods

    Dis-moi si ça résout ton problème.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Points : 138
    Points
    138
    Par défaut
    Du coup j'ai créer une seconde route qui pointe vers le même template sans la methode post comme tu me l'a indiqué et du coup ça fonctionne.

    Par contre j'ai une autre difficulté, j'aimerais passer le titre de ma page et un dico ou liste dans mon template lors du get et récupérer un champ texte et le résultat de mon select avec le post. Le soucis que je rencontre, c'est que si je en défini pas tous les champs, pour les deux routes, ma page va buguer, je ne vois pas comment passer outre.

    Voilà le code modifier.

    start.py :

    Code python : 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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from bottle import Bottle, run, view, request, static_file, route
     
    app = Bottle()
    runners = ['nmap', 'vmware']
     
    @route('/htdocs/:path#.+#', name='static')
    def static(path):
        return static_file(path, root='.')
     
    @app.route('/')
    @view('test.tpl')
    def test():
        return {'plageip': '', 'password': '', "title": "Titre de page!", 'runners': runners, 'runner': None} #Je voudrais avoir ici return {"title": "Titre de page!", 'runners': runners}
     
    @app.route('/', method='POST')
    @view('test.tpl')
    def hello():
        plageip = request.forms.get('plageip')
        runner = request.forms.get('pack[]')
        return dict(plageip=plageip, runner=runner, runners=runners, title="Nouvelle page!") #Et là return dict(plageip=plageip, runner=runner)
     
     
     
    run(app, host='0.0.0.0', port=8080, debug=True, reloader=True)

    Et la mon template :

    Code python : 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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <script type="text/javascript" src="jquery-2.1.3.min.js" charset="utf-8"></script>
            <script src="css/select2-3.5.2/select2.js"></script>
            <link rel="stylesheet" href="css/select2-3.5.2/select2.css"/>
     
            <script type="text/javascript">
                $(document).ready(function() {
    	            $(".host").select2({width: '245px'});
    	        });
            </script>
        </head>
     
    %if title:
        <h1>{{title}}</h1>
    %else:
        <h1>Pas de titre spécifié</h1>
    %end
     
    <form action="" method="POST">
        Plage d'adresse ip: <input name="plageip" type="text" required=""/>
        <select name="pack[]" class="host" multiple="multiple">
    			% for item in runners:
    				<option value="{{item}}">{{item}}</option>
                %end
    			</select>
        <input value="Login" type="submit" />
    </form>
     
    %if plageip:
        <p>{{plageip}}</p>
    %end
    %if runner:
        <p>{{la}}</p>
    %end
     
    </html>

    Et si jamais, ma route static ne fonctionne pas, mais j'ai pas encore eu le temps d'approfondir le sujet, donc y a surement un truc que j'ai pas piger ^^

Discussions similaires

  1. [HTTP]passage de parametres via la methode post
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/03/2008, 14h11
  2. Envoi incomplet avec methode post
    Par Tr@nkill dans le forum ASP
    Réponses: 8
    Dernier message: 16/05/2005, 12h14
  3. Protocole HTTP: methode POST
    Par Nyx dans le forum Général Conception Web
    Réponses: 15
    Dernier message: 01/04/2005, 17h45
  4. [Servlet] Form. Methode POST - Erreur 405
    Par Johnbob dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/11/2004, 16h46
  5. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03

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