Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

FLASK Mapping d' URL ?

+1 vote

J'ai des anomalies de redirection que je constate dans la barre d'adresse lorsque je post.
( tendance à rester sur http://127.0.0.1:5000 )

Il s'agit de formulaires simples avec un seul champ sur chaque template (pseudo ou mot de passe).

Je crois que c'est en rapport avec app.add_url_rule mais j'ai lu des choses contradictoires.

les templates sont dans le repertoire templates, les images dans le static, et le start.py dans la racine.
Voici le code de start.py . Je n'ai pas encore changés les titres mais ça va venir.

from flask import Flask
from flask import render_template
from flask import request

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required

from datetime import date, time, datetime,timedelta
import datetime 
import os, sys

class Utilisateur:

    def __init__(self):

        self.pseudo = 'pseudo_default'
        self.password = 'password_default'
        self.logged = False


moi = Utilisateur()

maintenant = datetime.datetime.now()
d = maintenant

app = Flask(__name__)

@app.route('/index.html/', methods=['GET', 'POST'])
def index():

    if request.method == 'POST':
        moi.pseudo = request.form["pseudo_input"]


        return redirect(url_for('index_MDP')) 
    else:
        return render_template('index.html', titre="Bienvenue !", la_date=d, moi=moi)

@app.route('/index_MDP.html', methods=['GET', 'POST'])
def index_MDP():

    if request.method == 'POST':
        moi.password = request.form["mdp_input"]


        return redirect(url_for('index_douanePage', titre="Bienvenue !", la_date=d, moi=moi))
    else:
        return render_template('index_MDP.html', titre="Bienvenue !", la_date=d, moi=moi)


@app.route('/index_douanePage.html', methods=['GET','POST'])
def index_douanePage():

    if request.method == 'POST':
        moi.pseudo = request.form["pseudo_input"]


        return redirect(url_for('douane_okay', titre="Bienvenue !", la_date=d, moi=moi))
    else:
        return render_template('index_douanePage.html', titre="Bienvenue !", la_date=d, moi=moi)


@app.route('/douane_okay.html', methods=['GET','POST'])
def douane_okay():

    if request.method == 'POST':
        moi.pseudo = request.form["pseudo_input"]


        return redirect(url_for('douane_okay', titre="Bienvenue !", la_date=d, moi=moi))
    else:
        return render_template('douane_okay.html', titre="Bienvenue !", la_date=d, moi=moi)


@app.route('/static/<path:filename>')
def serve_static(filename):
    return send_from_directory('static', filename)

if __name__ == '__main__':
    app.run(debug=True)

J'ai regardé du code sur github ou nullege mais il s'agit de projets beaucoup plus gros que mon petit test,
et il faut deja que je comprenne petit.
L'idée à terme est de mettre un fichier URLS, un autre VIEWS et encore des autres comme le layout.html .
Il y a une histoire de mapping d' URL pour que le serveur sache quelle page donner en fonction de mes clicks ou info entrée dans la barre d'adresse, mais dans la pratique je bloque sur seulement 3 pages !.

Voici la tête des templates qui se ressemblent:

<html>
<head>
<meta charset="iso-8859-1">

<title> mettre titre de la page</title>

    <!-- Bootstrap core CSS -->
    <link href="./static/bootstrap.min.css" rel="stylesheet">

    <script src="/static/js/brython.js"></script>


</head>
<body onLoad="brython()">
<script type="text/python">
from browser import document as doc
from browser import alert

def saluer(ev):
    alert("Salut %s !" %doc["pseudo_input"].value)

doc["pseudo_bouton"].bind('click', saluer)

</script>

<form method="post" >
    <p>Entre votre pseudo ==> <input id="pseudo_input" name="pseudo_input"><button id="pseudo_bouton" type="submit" >click !</button><p>
</form>

</body>
</html>


<br />
<h3>La date d'aujourd'hui est : {{ la_date }}</h3>
<br />

<h4> votre pseudo  {{ moi.pseudo }}  </h4>
<h4> votre log status  {{ moi.logged }}  </h4>

</body>
</html>

( Dans la balise FORM, j'ajoute ACTION= la page concernée )

demandé 26-Fev-2015 par anonyme
edité 26-Fev-2015 par foxmask

J'ai pas compris le problème : que veux-tu faire, qu'est-ce qui ne marque pas comme prévu ?

1 Réponse

+5 votes

je note que t'as omis les imports de redirect et url_for.
ca aide pas on va dire:)

sinon, une bonne lecture sur flask: http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

répondu 27-Fev-2015 par ashgan (698 points)

lien interessant !

...