- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的第一个问题,所以如果我错过了什么,请告诉我;)
我正在构建一个网站,该网站将运行一些 python 代码来解决特定问题,并将结果显示为数字和绘图(全部在同一页面上)。为了在运行 python 代码之前使用参数并可视化它们,我首先需要将一些表单数据从 html 发送到 Flask,所以我想我可以通过 ajax 来做到这一点 - 正如我之前用标准绘制结果一样参数,基于mpld3示例。
首先,html/form 端(查找注释):
<div class="row">
<div class="col-md-8">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Context Plots</h3>
</div>
<div class="panel-body overflow">
<div calss="loading-div" id="context_loading_div">
<div class="loading-tag">
<i class="fa fa-cog fa-spin"></i>
</div>
</div>
<div class="plot" id="context_plot_container"></div>
<!-- ### plot script here ### -->
<script src="{{ url_for('static', filename='js/solver_context.js') }}" type="text/javascript">
</script>
</div>
</div>
</div>
<div class="col-md-4">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Context Parameters</h3>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
<div class="form-group">
<label for="buy_upper" class="col-sm-6 control-label" title="Utility buying price low tariff">Buying high [CHF]</label>
<div class="col-sm-6 input-group">
<span class="input-group-addon"><i class="fa fa-usd"></i></span>
<--! ### form element to fetch data from here ### -->
<--! the jinja templating stuff here works fine -->
<input type="range" name="buy_upper" class="form-control" id="buy_upper" min="0.05" max="1.0" step="0.01" value={% if reqMeth == 'POST' %}{{ request.form['buy_upper'] }} {% else %}"0.22"{% endif %} />
</div>
<--! some more form elements -->
</div>
</form>
</div>
</div>
</div>
</div>
第二,javascript/ajax 方面:
$(window).load(function() {
$("#context_plot_container").hide();
$("#context_loading_div").show();
var buy_upper = document.getElementById("buy_upper").value;
var buy_lower = document.getElementById("buy_lower").value;
var sell_upper = document.getElementById("sell_upper").value;
var sell_lower = document.getElementById("sell_lower").value;
var qu = {"buy_upper": buy_upper, "buy_lower": buy_lower, "sell_upper": sell_upper, "sell_lower": sell_lower};
$.ajax({
type: "POST",
async: true,
contentType: "application/json; charset=utf-8",
url: "/context_plot",
data: JSON.stringify(qu),
success: function (data) {
var graph = $("#context_plot_container");
graph.html(data);
$("#context_plot_container").show();
$("#context_loading_div").hide();
},
dataType: "html"
});
});
这个脚本应该在按下刷新按钮后运行,但现在我正在与页面的其余部分同时加载它。由于我对 javascript/jquery/ajax 的任何内容都很陌生,因此我或多或少只是复制了上面提到的 mpld3 示例。
最后,python/flask 方面:
## plot routes
@app.route('/context_plot', methods=['GET', 'POST'])
def context_plot():
import numpy as np
plt.close(); # (opened above - works fine in the results plot)
# check params
# try:
buy_upper = float(request.args.get('buy_upper'));
buy_lower = float(request.args.get('buy_lower'));
sell_upper = -float(request.args.get('sell_upper'));
sell_lower = -float(request.args.get('sell_lower'));
# except:
# buy_lower = 0.19;
# buy_upper = 0.29;
# sell_lower = -0.09;
# sell_upper = -0.09;
# data
up = np.array([buy_lower] * 28 + [buy_upper] * 52 + [buy_lower] * 16);
urp = np.array([sell_lower] * 28 + [sell_upper] * 52 + [sell_lower] * 16);
# time vector
t = np.arange(0, len(up) - 1, 1 / 96.0)[:len(up)];
# figure
fig, (ax1, ax2) = plt.subplots(2, 1, figsize = (9, 6), sharex = 'col');
# subplot 1
ax1.grid(True, alpha = 0.5);
ax1.set_ylabel('costs [CHF/kWh]');
ax1.set_title('Utility profiles');
ax1.plot(t, up, t, urp, 'k');
ax1.margins(y = 0.1);
leg = ax1.legend(['buying', 'selling'], loc = 'upper left', framealpha = 0);
leg.set_title(''); # workaround for "None" at the bottom left
# subplot 2
ax2.grid(True, alpha = 0.5);
ax2.plot(t, urp);
ax2.margins(y = 0.1);
plugins.connect(fig, plugins.MousePosition(fontsize=12));
return mpld3.fig_to_html(fig); # (works fine in the results plot)
现在,当我尝试运行所有内容时,该数字没有显示。当我查看 Firefox 的网络检查工具(“响应”部分)时,我发现 Werkzeugs 的调试器说:
File "X:\...\opt.py", line 84, in context_plot
sell_upper = -1 * request.args.get('sell_upper');
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
(来自 here )
所以我解释说查询字符串中没有“sell_upper”。然后我再次查看 Firefox 的网络检查工具(“Params”部分),我发现:
{"buy_upper":"0.99","buy_lower":"0.18","sell_upper":"0.27","sell_lower":"0.16"}
我还尝试通过使用 qu
而不是 JSON.stringify(qu)
来摆弄参数的传递方式,或者去掉引号等等...我似乎不太明白。
所以我猜问题是查询字符串仍然格式错误,或者 request.args.get() 在通过 ajax 调用路由时无法按预期工作...或者完全是其他东西 -.-
最佳答案
您正在使用 AJAX 执行 POST 请求,但在 Flask 中访问 GET 请求参数(它们位于 URL 的查询部分,以 ?
开头)。看 Request object documentation .
您应该使用 form
属性。
var = request.form.get('sell_upper')
如果响应可以缓存并且除了在服务器上进行计算之外实际上不执行任何操作,您也可以简单地在 AJAX 中使用 GET 请求并保留 Python 代码不变。
关于jquery - 通过flask中的查询字符串获取表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28012457/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!