我正在Flask中构建一个小型Web应用程序,代码摘录如下。基本上,我试图在startsession
中存储一些数据,然后一旦实现就转移到tagpage
。但redirect
无效。
当我运行TEST 1
时,它会在控制台中显示hello, world
但主页看起来相同。
当我运行TEST 2
时,它会在控制台中显示html,但主页看起来是一样的。
这就是我所拥有的:
@app.route('/startsession', methods=['POST'])
def startsession():
_username = request.form['inputName']
session['user_name'] = _username
...
return redirect(url_for('tagpage'))
然后,要么:
### TEST 1
@app.route("/tagpage")
def tagpage():
return "hello, world"
或者:
### TEST 2
@app.route("/tagpage")
def tagpage():
return render_template('tagpage.html', filename=filename)
点击触发startsession
的按钮后看到的示例:
如何让浏览器真正转到http://localhost:5000/tagpage
?
更新: 这是我的JQuery脚本:
$(function(){
$("#btnStartSession").click(function(){
$.ajax({
url: '/startsession',
type: 'POST',
data: $('form').serialize(),
success: function(response){
console.log(response);
},
error: function(error){
console.log(error);
}
});
});
});
答案 0 :(得分:7)
我猜截图显示了savePoints()
的输出,因此我得出结论console.log
是在javascript中完成的,可能是jQuery(等待来自提问者的答案)。
如果是这种情况,这是预期的行为。 POST
已完成,javascript收到重定向,POST
是重定向的资源。
javascript正在记录重定向资源的html。
如果您想重定向浏览器,可以使用以下命令在javascript(GET
完成后)手动执行此操作:
POST
或者让浏览器为您执行此操作,在这种情况下,window.location = "/tagpage";
必须通过POST
完成。
答案 1 :(得分:0)
我认为西蒙在这里走在正确的轨道上。您可以在之前的questions jquery中找到有关Flask documentation,烧瓶和重定向的更多信息。
简而言之,您应该只使用{{3}}中的普通html表单。
模板:
{% extends "layout.html" %}
{% block body %}
{% if session.logged_in %}
<form action="{{ url_for('add_entry') }}" method=post class=add-entry>
<dl>
<dt>Title:
<dd><input type=text size=30 name=title>
<dt>Text:
<dd><textarea name=text rows=5 cols=40></textarea>
<dd><input type=submit value=Share>
</dl>
</form>
{% endif %}
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}</h2>{{ entry.text|safe }}
{% else %}
<li><em>Unbelievable. No entries here so far</em>
{% endfor %}
</ul>
{% endblock %}
查看功能:
@app.route('/add', methods=['POST'])
def add_entry():
if not session.get('logged_in'):
abort(401)
db = get_db()
db.execute('insert into entries (title, text) values (?, ?)',
[request.form['title'], request.form['text']])
db.commit()
flash('New entry was successfully posted')
return redirect(url_for('show_entries'))