webentwicklung-frage-antwort-db.com.de

Wie übergeben Sie eine Variable zwischen den Flask-Seiten?

Angenommen, ich habe folgenden Fall;

@app.route('/a', methods=['GET'])
def a():
  a = numpy.ones([10,10])
  ...
  return render_template(...) # this rendered page has a link to /b

@app.route('/b', methods=['GET'])
def b():
  print a
  ....

In der überarbeiteten Seite gibt es einen Link, der die Seite/a nach/b leitet. Ich versuche, die Variable a an page/b zu übergeben, um sie wiederzuverwenden. Wie soll ich diese Flaschen-App machen? Muss ich eine Sitzung verwenden oder gibt es eine andere Lösung?

17
erogol

Wenn Sie einen Python-Wert weitergeben möchten, den der Benutzer nicht sehen oder kontrollieren muss, können Sie die Sitzung verwenden:

@app.route('/a')
def a():
    session['my_var'] = 'my_value'
    return redirect(url_for('b'))

@app.route('/b')
def b():
    my_var = session.get('my_var', None)
    return my_var

Die Sitzung verhält sich wie ein Diktat und serialisiert zu JSON. Sie können also alles, was mit JSON serialisierbar ist, in die Sitzung einfügen.

Sie sollten es vermeiden, große Datenmengen in die Sitzung aufzunehmen, da diese bei jeder Anfrage an den Client gesendet werden müssen. Verwenden Sie für große Datenmengen eine Datenbank oder einen anderen Datenspeicher.


Wenn Sie einen Wert aus einer Vorlage in einer URL übergeben möchten, können Sie einen Abfrageparameter verwenden:

<a href="{{ url_for('b', my_var='my_value') }}">Send my_value</a>

wird die URL erzeugen:

/b?my_var=my_value

was von b gelesen werden kann:

@app.route('/b')
def b():
    my_var = request.args.get('my_var', None)
43
davidism

Dem Link zur Route /b in der Vorlage für /a können Abfrageparameter hinzugefügt werden, die Sie in der Route für /b lesen können. Alternativ können Sie den Wert für a in einer Sitzungsvariablen speichern, um zwischen den Ansichten darauf zuzugreifen.

1
Matt Healy