【发布时间】:2018-05-02 12:50:07
【问题描述】:
我对 Flask 中的以下行为完全感到困惑。我确信发生了一些基本问题,但我不知道这是脚本问题还是服务器问题,所以我发布了我能想到的最短示例。
页面有两种方式将数据发布到服务器。一个由提交<form> 触发,另一个由侦听Ctrl+V 的脚本触发。我相信两者都应该导致最后一次render_template 通话。 但是只有第一个可以。
paste.html
{%if msg %}
{{ msg }}
{% else %}
Waiting
{% endif %}
<form action="/pastetest" method="post">
Dummy<br>
<input type="text" name="foo" value="bar">
<br>
<input type="submit" value="Send info" />
</form>
脚本 侦听“粘贴”事件 (Ctrl V) 并在表单中发布一些虚拟字符串。
document.addEventListener('paste', function (e) {sendform(e);},false);
sendform = function (e) {
var fd = new FormData();
fd.append('data','testing paste');
var request = new XMLHttpRequest();
request.open("POST", "/pastetest");
request.send(fd);
console.log("Sent")
};
Flask 蟒蛇:
@app.route('/')
def index():
return render_template('paste.html',msg="Waiting")
@app.route('/pastetest',methods=['POST'])
def image_upload():
if request.method == 'POST':
print("On the server")
print(request.form)
alldone="All done time=%d" % time.time()
print(alldone)
return redirect(url_for('confirm',msg=alldone))
@app.route('/confirm/<msg>')
def confirm(msg):
print("At confirm",msg)
return render_template("paste.html",msg=msg) #<---should end up here
从控制台我看到正在发布数据并且正在调用confirm。
127.0.0.1 - - [19/Nov/2017 00:51:42] "GET /confirm/All%20done%20time%3D1511049102 HTTP/1.1" 200 -
但页面仅在提交按钮之后呈现。否则会卡在Waiting。
编辑: 澄清一下:我需要的是获取发布的数据(只是上面的一个虚拟字符串,但将是剪贴板中的一个 blob),用它做一些事情,然后用结果渲染一个模板。最简单的方法是什么?
(我对 js/client-server 等一无所知。只是想为我已经编写的图像分析程序制作一个简单的 Web 界面。感谢简单的解释 :)
【问题讨论】:
-
您的模板缺少基本的 HTML 结构。
标签: javascript python flask