簡體   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