【发布时间】:2016-08-17 19:48:04
【问题描述】:
我正在使用 Flask 和 Javascript 的组合。在用户从网页输入后,我将一个 JSON 对象发送回 Flask 服务器。即:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/completed/');
xhr.setRequestHeader('Content-Type', 'application/json');
var stringifiedObject = dataResultToJSON(data);
xhr.send(stringifiedObject);
然后在 Flask 中:
@main_view.route('/completed/', methods=['POST'])
def completed():
if (request.headers['Content-Type'].startswith('application/json')):
#do stuff here
return redirect(url_for("main_view.home"))
@main_view.route('/')
def home():
logger.debug(">>home")
return render_template('home.html')
当烧瓶在 Ajax POST 后重定向到“家”时,我得到以下控制台输出:
DEBUG:myapp:>>home
INFO:werkzeug:127.0.0.1 - - [24/Apr/2016 20:13:15] "GET / HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [24/Apr/2016 20:13:15] "GET /%3C!DOCTYPE%20html%3E%3C!-- (... entire web page html)
奇怪的是上面的第二个 INFO 语句——当我从其他任何地方重定向到家时,我没有打印出这一行——只有当我从“完成”POST 方法重定向时才会发生。 Werkzeug 记录了整个 home.html 网页 html,我在网络客户端中收到错误:
NetworkError: 404 NOT FOUND - http://127.0.0.1:5000/%3C!DOCTYPE%20html%3E%3C!-- (... entire web page html)
我还按照此处将 code=307 添加到重定向中:Make a POST request while redirecting in flask 但仍然出现相同的 404 错误。
我不知道如何解决这个问题。
【问题讨论】:
-
我认为您正在使用 JavaScript 重定向到 POST 的结果。这将是
home呈现的 HTML。您可能只希望completed到return url_for('main_view.home')而不是返回重定向。