繁体   English   中英

在另一个 function 中使用来自 function 的变量,与 flask

[英]Use a variable from a function in another function, with flask

我使用 Flask 来制作网站。

@app.route('/consulta',methods=['POST'])
def consulta():
    if request.method=='POST': #Si se han enviado datos
        dia = request.form['dia'] #Obtenemos los datos del formulario
        videobeam = request.form['videobeam']
        tablero = request.form['tablero']
        hora = request.form['hora']
        aa = darHora(hora)

        a = aa[0] #<<<<<----- HERE IS PROBLEM
        b = aa[1] #<<<<<<- HERE IS PROBLEM


        cursor = db.connection.cursor()
        cursor.execute("SELECT * FROM salones WHERE {0}=1 AND videobeam = '{2}' AND tablero = '{1}' AND `{3}` = 1 AND `{4}` = 1".format(dia,videobeam,tablero,a,b)) 

        #Buscamos que coincidan con la base de datos, se pregunta por el dia de disponibilidad, si tiene videobeam y tablero
        data = cursor.fetchall() #Se obtiene en una lista
        cursor.close() #Se cierra la conexión
        return render_template('consulta.html', datos = data) #Se visualizará los resultados, y se pasa a data como parametro

我想在另一个 function 中使用来自 function 的变量“a”和“b”,因为它们来自用户以表单形式输入。 问题是我不能“返回”它们,因为 flask 只允许我返回 function 的 render_template。

任何想法? 谢谢!!!

Assuming the other function is a view function associated with a different endpoint, you can simply pass these variables using Flask session. 例如:

from flask import session

@app.route('/consulta',methods=['POST'])
def consulta():
    if request.method=='POST': #Si se han enviado datos
        dia = request.form['dia'] #Obtenemos los datos del formulario
        videobeam = request.form['videobeam']
        tablero = request.form['tablero']
        hora = request.form['hora']
        aa = darHora(hora)

        session['a'] = aa[0] #<<<<<----- HERE IS PROBLEM
        session['b'] = aa[1] #<<<<<<- HERE IS PROBLEM
        ...

 @app.route('/something')
 def user_parameters():
    a = session.get('a')
    b = session.get('b')
    ...

处理此问题的一种方法是创建ab全局变量:

a = None
b = None

@app.route('/consulta',methods=['POST'])
def consulta():
    if request.method=='POST': #Si se han enviado datos
        ...
        global a, b
        a, b = aa[0], aa[1]
        ...

现在,每次调用consulta()时,都会将ab的全局值替换为新值。 在程序的其他地方,您可以执行相同的操作以获取ab的最新设置值。


请注意,如果您遇到此问题,您可能需要重新考虑为什么需要ab的值来执行此操作。 它们是否与提交 POST 请求的特定用户相关联? 您如何在其他 function 中使用它们,以及其他 function 何时相对于这个运行?

如果您需要在各种断开连接的 API 调用之间访问相同的信息,但您有办法(例如令牌)来跟踪发出请求的用户,我建议使用实际数据库来存储信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM