首页 > 解决方案 > Flask requests.args 在新的应用程序路由中保持变量

问题描述

我正在使用 request.args 获取变量。我想添加另一个应用程序路由以获取一个新变量,该变量将链接到应用程序路由“/search/”中的 client_id。添加另一个应用程序路由时如何保留此 client_id 变量?

from flask import Flask
from flask import render_template, url_for, request, redirect
from flask import make_response
app = Flask(__name__)
import pandas as pd


@app.route('/', methods=['GET'])
def index():
    res = '''<form action="/search" method=>
                    <p><input type="text" name="query" value="test"></p>
                    <p><input type="submit" value="Search"></p>
                    <br />
    </form>'''
    return res 

@app.route('/search', methods=["GET","POST"])
def suggestion():
    client_id = request.args['query']  
    return render_template('untitled2.html')


if __name__ == '__main__':
    app.run(debug=True) 

例如,我想添加这个应用程序路由

@app.route('/csv/')
def download_csv():
    #can't figure out how to obtain the client_id var
    client_id = ??? 
    model_id=request.args['textid']
    model_id1=request.args['textid1']
    model_id2=request.args['textid2']

    # return response
    df=recommender.update_history(client_id, model_id, model_id1, model_id2)
    df= recommender.get_csv()
    resp = make_response(df.to_csv(encoding='iso-8859-1',index=False))
    resp.headers["Content-Disposition"] = "attachment; filename=export.csv"
    resp.headers["Content-Type"] = "text/csv"
    return resp

这是我的 html 模板中的内容,我需要在其中获取以前在 request.args['text'] 中的变量,并将其与新的表单数据一起发送到新的应用程序路由“/csv”:

无标题2.html:

 <div class="form-group">
            <h4>Suggestions for {{ request.args['text']  }}  </h4>
            <form action ="/csv">
             <form method="POST">
                <br>
                <label>Enter 3 suggestions</label>
                <br>
                <input name="textid", placeholder="Suggested Model ID #", value="{{ request.form['textid'] }}"/>
                <input name="textid1", placeholder="Suggested Model ID #", value="{{ request.form['textid1'] }}"/>
                <input name="textid2", placeholder="Suggested Model ID #", value="{{ request.form['textid2'] }}"/>

                <input type="submit" >
              </form>
          </div>

 <h4>Entered Suggestions:{{ request.form['textid'] }}  {{ request.form['textid1'] }}  {{ request.form['textid2'] }} </h4>

标签: flaskjinja2forms

解决方案


您可以保留client_id变量,将其添加到会话中,将其保存在 cookie 中或使用g对象。

对于会话,只需使用而不是client_id, session['client_id'] = request.args['query']。你总是可以得到它session['client_id']。此外,您必须像这样在应用程序的配置中设置密钥app.config['SECRET_KEY'] = 'My secret key'

在此处阅读有关会话的更多信息。


推荐阅读