客户端 POST 请求后 Flask 'render_template'
Flask 'render_template' after client POST request
所以,我正在开发一个小型 Web 应用程序,它有一个小 canvas,用户应该画一些东西,然后我想用那个图像做一些 python canvas。像这样:
这工作正常。当我按下“点击我!”时,我调用了一个 JS 函数,该函数 POST 将图像发送到我的 Flask 服务器。这也是有效的,问题是在我收到图像后,我想渲染一个新页面来显示一些结果,但是这个页面根本没有渲染。
现在,我对 Javascript 完全陌生,几乎什么都不知道,基本上我使用的每个 JS 都是从互联网上复制粘贴的,所以我假设我一定遗漏了一些非常简单的东西,我只是不知道。
服务器代码如下:
from flask import Flask, render_template, request
import re
from io import BytesIO
import base64
from PIL import Image
app = Flask(__name__)
@app.route("/")
def hello_world():
return render_template('drawing.html')
@app.route("/hook", methods=['POST', 'GET'])
def hook():
image_data = re.sub('^data:image/.+;base64,', '', request.form['imageBase64'])
im = Image.open(BytesIO(base64.b64decode(image_data)))
im.show()
return render_template('results.html')
第一个路由只是打开了canvas,第二个是在客户端请求后执行的,它有这个功能:
function surprise() {
var dataURL = canvas.toDataURL();
$.ajax({
type: "POST",
url: "http://127.0.0.1:5000/hook",
data:{
imageBase64: dataURL
}
}).done(function() {
console.log('sent');
});}
显然,这是可行的。我有这条线:
im.show()
这样我就可以看到图像并准确地从 canvas 中得到绘图,我现在应该处理它:
但是之后没有呈现结果页面,没有任何反应。为什么?
问题是您正在 return 浏览页面以响应 post 图片的调用。相反,您应该 return 一个响应(例如 json 格式)包含有关刚刚进行的调用结果的信息(即图像的 post ),因此,在客户端,您必须将用户重定向到适当的页面。
要了解它为何不起作用,请打印return来自
调用的响应内容
var response = '';
$.ajax({ type: "POST",
url: "http://127.0.0.1:5000/hook",
data:{
imageBase64: dataURL
},
success : function(text)
{
response = text;
}
});
alert(response);
所以,我正在开发一个小型 Web 应用程序,它有一个小 canvas,用户应该画一些东西,然后我想用那个图像做一些 python canvas。像这样:
这工作正常。当我按下“点击我!”时,我调用了一个 JS 函数,该函数 POST 将图像发送到我的 Flask 服务器。这也是有效的,问题是在我收到图像后,我想渲染一个新页面来显示一些结果,但是这个页面根本没有渲染。
现在,我对 Javascript 完全陌生,几乎什么都不知道,基本上我使用的每个 JS 都是从互联网上复制粘贴的,所以我假设我一定遗漏了一些非常简单的东西,我只是不知道。
服务器代码如下:
from flask import Flask, render_template, request
import re
from io import BytesIO
import base64
from PIL import Image
app = Flask(__name__)
@app.route("/")
def hello_world():
return render_template('drawing.html')
@app.route("/hook", methods=['POST', 'GET'])
def hook():
image_data = re.sub('^data:image/.+;base64,', '', request.form['imageBase64'])
im = Image.open(BytesIO(base64.b64decode(image_data)))
im.show()
return render_template('results.html')
第一个路由只是打开了canvas,第二个是在客户端请求后执行的,它有这个功能:
function surprise() {
var dataURL = canvas.toDataURL();
$.ajax({
type: "POST",
url: "http://127.0.0.1:5000/hook",
data:{
imageBase64: dataURL
}
}).done(function() {
console.log('sent');
});}
显然,这是可行的。我有这条线:
im.show()
这样我就可以看到图像并准确地从 canvas 中得到绘图,我现在应该处理它:
但是之后没有呈现结果页面,没有任何反应。为什么?
问题是您正在 return 浏览页面以响应 post 图片的调用。相反,您应该 return 一个响应(例如 json 格式)包含有关刚刚进行的调用结果的信息(即图像的 post ),因此,在客户端,您必须将用户重定向到适当的页面。
要了解它为何不起作用,请打印return来自
调用的响应内容var response = '';
$.ajax({ type: "POST",
url: "http://127.0.0.1:5000/hook",
data:{
imageBase64: dataURL
},
success : function(text)
{
response = text;
}
});
alert(response);