将HTML输入中的变量分配给Python / Flask

时间:2019-07-08 11:50:28

标签: python html flask

我有一个应用程序,该应用程序使用变量在 pandas 数据框中定位行。我希望用户使用html中的input[type=range]选择要用作变量x的年份。

这是我的python文件:

from flask import Flask, render_template, request

app = Flask(__name__)

x = '2005'
mask = (df['start'] < x) & (df['end'] > x) 
output = df.loc[mask]

@app.route("/")
def home():
    return render_template("index.html", output=output)

这是我的html表单:

<form name="myform" method="POST">
  <input type="range" name="yearInputName" id="yearInputId" value="1980" min="1880" max="2010">
</form>

如何将变量x分配给表单的输出?因此,例如,当用户选择2007年时,在python文件中,变量x将更改为“ 2007”吗?

2 个答案:

答案 0 :(得分:0)

使用request.form.get()通过POST方法访问表单中的数据。

类似的东西:

from flask import Flask, render_template, request

app = Flask(__name__)

def calculate(year):
    mask = (df['start'] < x) & (df['end'] > year) 
    return df.loc[mask]

@app.route("/",  mothods=['POST', 'GET'])
def home():
    try:
        input_year = request.form.get('yearInputName')
    except:
        input_year = '2005' # Default

    # You may wish to add some validation for input_year here.

    output = calculate(input_year)
    return render_template("index.html", output=output)

答案 1 :(得分:0)

如果我对您的理解正确,那么您基本上想根据用户输入更改实际的python文件。可能不会。因为多个用户将有单独的输入。 无论我了解什么,这都是您可能想要(或可能会帮助您)的事情。

要从发帖请求中获取输入-

只需使用request.form.get('name')即可获取数据。

Furthermore here.

您可能想使用JavaScript发送帖子数据。

尝试一下-

var element = document.getElementById('yearInputId')
var xhr = new XMLHttpRequest()
xhr.open('/url') \\the route you want this data to handle
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
xhr.send("year=" + element.value)

您可能希望将年份存储在数据库或会话变量中

请参见using db with flaskusing sessions

如果您不想存储年份而只是暂时存储年份,则可以将其存储在会话变量中。

如果您要根据发帖请求投放“ /”

#check if request method is post
if request.method == 'POST':
    year = request.form.get('year') #change year to your html post variable name
    return render_template("index.html", output=year)
else if request.method == 'GET':
    return render_template("index.html", output=output)

是的,请确保在路由中启用发布请求。

@app.route('/', mothods=['POST', 'GET'])

建议-

  1. 您可能想为邮寄数据创建一条单独的路由。
  2. 根据您的目标使用数据库或会话。当满足将来的请求时,只需解析年份即可。您可能需要存储一个唯一的标识符。如用户名或浏览器Cookie以及年份。
  3. 如果要在本地更新某些内容,请使用JavaScript。