Seite 1 von 1

Flask: Eingabe über mehrere Routen weitergeben

Verfasst: Sonntag 16. April 2023, 11:37
von Welpe
Moin,

ich versuche mit Flask ein Script zu erstellen, welches den Nutzer um Eingaben bittet und diese dann am Ende ausgibt. Als Beispiel habe ich hier Name und Geschlecht genommen.
Auf der ersten Seite (Index) frage ich den Namen ab.
Auf der zweiten Seite (site_2) gebe ich den Namen aus und frage nach dem Geschlecht.
Auf der dritten Seite (site_3) möchte ich den Namen und das Geschlecht ausgeben.
Das Geschlecht ist kein Problem aber wie bekomme ich den Namen von der Index-Seite (oder von der zweiten Seite) auf die dritte Seite ohne ihn in der URL zu übergeben?

Code: Alles auswählen

from flask import Flask, render_template, request

app = Flask(__name__)

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

@app.route("/site_2", methods = ['POST'])
def site_2():
    if request.method == 'POST':
        name = request.form['name']
        return render_template('site_2.html', name = name)

@app.route("/site_3", methods = ['POST'])
def site_3():
    if request.method == 'POST':
        gender = request.form['radio_button']
        return render_template('site_3.html', gender = gender)

if __name__ == '__main__':
    app.run(debug = True)
Index bzw. erste Seite

Code: Alles auswählen

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Index</title>
</head>
<body>

    <h1>Index</h1>
    <form action="http://localhost:5000/site_2" method="post">
        <label>Name</label>
        <input type="text" name="name">
        <input type="submit" value="Send" >
    </form>
    
</body>
</html>
Seite 2 (site_2)

Code: Alles auswählen

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Site 2</title>
</head>
<body>
    <h1>Site 2</h1>
    <h2>Hello {{ name }}</h2>

    <form action="http://localhost:5000/site_3" method="post">
        <input type="radio" name="radio_button" id="radio_male" value="radio_male">
        <label for="radio_male">Male</label>
        <input type="radio" name="radio_button" id="radio_female" value="radio_female">
        <label for="radio_female">Female</label>
        <input type="submit" value="Send">
    </form>

</body>
</html>
Seite 3 (site_3)

Code: Alles auswählen

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Site 3</title>
</head>
<body>

    <h1>Site 3</h1>
    <p>Name: {{ name }}</p>
    <p>Gender: {{ gender }}</p>
    
</body>
</html>

Re: Flask: Eingabe über mehrere Routen weitergeben

Verfasst: Sonntag 16. April 2023, 12:14
von Sirius3
Daten werden in Sessions gespeichert:

Code: Alles auswählen

from flask import Flask, render_template, request, session

app = Flask(__name__)
app.secret_key = b"Ewqz3jWI"

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

@app.route("/site_2", methods = ['POST'])
def site_2():
    if request.method == 'POST':
        session['name'] = request.form['name']
        return render_template('site_2.html', **session)

@app.route("/site_3", methods = ['POST'])
def site_3():
    if request.method == 'POST':
        session['gender'] = request.form['radio_button']
        return render_template('site_3.html', **session)

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

Re: Flask: Eingabe über mehrere Routen weitergeben

Verfasst: Montag 17. April 2023, 18:00
von Welpe
Ich danke dir, das klappt wunderbar!