Flask: Eingabe über mehrere Routen weitergeben

Django, Flask, Bottle, WSGI, CGI…
Antworten
Welpe
User
Beiträge: 26
Registriert: Mittwoch 30. Dezember 2020, 10:39

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>
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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)
Welpe
User
Beiträge: 26
Registriert: Mittwoch 30. Dezember 2020, 10:39

Ich danke dir, das klappt wunderbar!
Antworten