Supongamos que tengo el siguiente caso;
@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
....
En la página roja hay un enlace que dirige la página /a a /b. Intento pasar la variable a a la página /b para reutilizarla. ¿Cómo debo hacer esta aplicación Flask? ¿Necesito usar la sesión o hay alguna otra solución?
Si desea pasar algún valor de Python que el usuario no necesita ver o controlar, puede usar la sesión:
@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
La sesión se comporta como un dictado y se serializa en JSON. Entonces puede poner cualquier cosa que sea JSON serializable en la sesión. Sin embargo, tenga en cuenta que la mayoría de los navegadores no admiten una cookie de sesión de más de ~4000 bytes.
Debe evitar poner grandes cantidades de datos en la sesión, ya que debe enviarse hacia y desde el cliente en cada solicitud. Para grandes cantidades de datos, utilice una base de datos u otro almacenamiento de datos. Consulte ¿Las variables globales son seguras para subprocesos en el matraz? ¿Cómo comparto datos entre solicitudes? y almacenar grandes cantidades de datos o una conexión de servicio por sesión de Flask.
Si desea pasar un valor de una plantilla en una URL, puede usar un parámetro de consulta:
<a href="https://stackoverflow.com/questions/27611216/{{%20url_for("b', my_var="my_value") }}">Send my_value</a>
producirá la url:
/b?my_var=my_value
que se puede leer de b:
@app.route('/b')
def b():
my_var = request.args.get('my_var', None)
El enlace a la ruta /b
en la plantilla para /a
podría tener parámetros de consulta agregados, que podría leer en la ruta para /b
. Alternativamente, puede almacenar el valor de a
en una variable de sesión para acceder a ella entre vistas.