python - 将下拉选择传递给 Flask/Python 函数
问题描述
我有一个工作 Flask 应用程序(下面的相关部分),它读取 .csv 文件并将数据帧的头部打印到屏幕上。此外,它会将消息中列的平均值硬编码到屏幕上。
from flask import Flask, render_template, request
import numpy as np
from scipy.stats import binom
from scipy.optimize import minimize
from scipy.stats import norm
from scipy import optimize
from pyodbc import connect
import pandas as pd
app = Flask(__name__)
@app.route('/dataTools', methods=['GET', 'POST'])
def data_tools_upload():
if request.method == 'POST':
orig_df = pd.read_csv(request.files.get('file'))
vars = list(orig_df.columns)
mean = orig_df[vars[4]].mean()
dims = orig_df.shape
message = 'You have data! There are %s rows and %s columns and the variable %s has mean %s' % (dims[0],dims[1],vars[4],round(mean,3))
table = orig_df.head(10).to_html(classes='data', header = "true")
return render_template('upload.html', tables = [table], message = message, vars = vars)
return render_template('upload.html')
if __name__ == '__main__':
app.run(debug=True)
# or just app.run()
在我的 HTML 中是以下部分
<form method=post enctype=multipart/form-data>
<input type=file name=file class = "btn btn-outline-secondary">
<input type=submit value=Upload class = "btn btn-outline-secondary">
</form>
<select name= vars method="GET" action="/">
{% for vars in vars %}
<option value= "{{vars}}" SELECTED>{{vars}}</option>"
{% endfor %}
</select>
</select>
这一切都“有效”,因为它显示了我希望的内容。但是,我特别致力于的是下拉菜单当前自动填充数据框中列的名称。我想要的是用户在该下拉菜单中选择一个选项,然后它将传递给该部分mean = orig_df[vars[4]].mean()
,以便打印他们选择的变量的平均值。
感谢您的任何建议。
更新
我意识到如果我想将信息从 HTML 发送回服务器,我需要进行一些更改。我正在尝试以下
@app.route('/dataTools', methods=['GET', 'POST'])
def data_tools_upload():
if request.method == 'POST':
orig_df = pd.read_csv(request.files.get('file'))
vars = list(orig_df.columns)
#mean = orig_df[vars[4]].mean()
var2use = request.option.get("vars")
mean = orig_df[var2use].mean()
dims = orig_df.shape
message = 'You have data! There are %s rows and %s columns and the variable %s has mean %s' % (dims[0],dims[1],vars[4],round(mean,3))
table = orig_df.head(10).to_html(classes='data', header = "true")
return render_template('upload.html', tables = [table], message = message, vars = vars)
return render_template('upload.html')
我在其中添加了该部分var2use = request.option.get("vars")
,然后在 HTML 中进行了以下更新,因此还有一个 POST 方法,并且该操作返回到烧瓶应用程序中的函数。
<select name= vars method="GET|POST" action="{{url_for('data_tools_upload')}}">
{% for var in vars %}
<option value= "{{var}}" SELECTED>{{var}}</option>"
{% endfor %}
</select>
</select>
我收到以下错误AttributeError: 'Request' object has no attribute 'option'
。
希望此更新有所帮助,也希望提供建议的解决方案。
解决方案
推荐阅读
- kotlin - Kotlin fun() 与 lambda 有区别吗?
- jmeter - 为什么 .jmx 文件没有在 jmeter 中运行?
- java - 如何在 Apache Ignite 中解决 CORS?
- javascript - 单击旁边的表格单元格时选中表格中的复选框
- time-series - 如何从 Google 地球引擎导出多个位置的长时间序列
- angular - Angular Reactive Form - 如何将订阅 valueChanges 添加到表单数组中的表单控件内的单个控件
- ios - SideMenu Jonkykong sideMenuDidAppear 和 sideMenuDidDisappear 委托未触发
- python - 在python中获取二进制整数作为输入
- kubernetes - Kubernetes:如何通过 jdbc 从本地 vm 连接到 k8s 中的 postgresql 数据库
- javascript - 如何验证 Javascript 中文本 oninput() 的 00-00-00-0000 格式