【问题标题】:Use a variable from a function in another function, with flask在另一个函数中使用一个函数中的变量,用烧瓶
【发布时间】:2019-10-13 18:20:48
【问题描述】:

我正在使用 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

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

有什么想法吗? 谢谢!!!

【问题讨论】:

    标签: python mysql variables flask global


    【解决方案1】:

    处理此问题的一种方法是创建 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 请求的特定用户相关联?你是如何在另一个函数中使用它们的,另一个函数相对于这个函数什么时候运行?

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

    【讨论】:

    • 您好!感谢您详细解释的答案、时间和兴趣。
    • 首先,用户给出他想要从大学预订教室的星期几和小时数。然后,我将格式 6:00am-7:00am 转换为 0 和 2(0 6am、1 6:30am 和 2 7:00am 等)然后,我搜索星期几,并为数据库prntscr.com/pir5lz 中的小时数,并在 website.com/consulta 中的表中向用户显示用户选择要预订的房间,问题来了,我必须使用用户之前给我的时间(存储在 a 和 b 中)在数据库中将其值设置为 0。你是怎么做到的?
    【解决方案2】:

    假设另一个函数是与不同端点关联的视图函数,您可以简单地使用 Flask 会话传递这些变量。例如:

    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')
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2013-04-22
      • 2012-09-28
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多