使用ajax时,Flask flash消息不再有效
当我使用表单操作提交表单数据时,我能够将消息刷新回来。
查看表单:
@app.route('/register')
def register():
return render_template('register.html')
Register.HTML
<form action="{{ url_for('processRegister') }}" method=post>
<dl>
<dt>email:
<dd><input type="text" name="email" id="email">
<div id="emailBlank" class="error"><font color="red">email cannot be blank</font></div>
<div id="emailFormat" class="error"><font color="red">invalid email format</font></div>
<dt>Password:
<dd><input type="password" name="password" id="password">
<div id="pwBlank" class="error"><font color="red">password cannot be blank</font></div>
<dt>Enter password again:
<dd><input type="password" name="password2" id="password2">
<div id="pw2Blank" class="error"><font color="red">verify password field cannot be blank</font></div>
<dd><input type="submit" value="submit" id="submit"><br><br>
</dl>
</form>
<a href="{{ url_for('verifyEmailForm') }}">send another verification email</a>
{% endblock %}
现在我正在使用ajax我的Flash消息不再出现。
$(document).ready(function(){
(code removed for clarity)
if (error == false) {
$.ajax({
type: "POST",
url: "/processRegister",
data: { varEmail: email, varPassword: pw}
});//ajax call
}//end if
});//submit
});//load validate.js
});//doc rdy
我对处理表单数据的看法:
@app.route('/processRegister', methods=['POST'])
def processRegister():
if request.method == 'POST':
email = request.form['varEmail']
flash("message -----> " + email)
return render_template('register.html')
我的布局页面使用下面的代码片段进行闪烁:
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
闪存消息作为会话的一部分存储,并在服务器端渲染模板时检索。 会话cookie不能被客户端JavaScript访问。 即使是这样,在JavaScript中也不容易解码。 即使你可以解码它,假设会话是一个cookie,而不是存储在服务器或其他东西。
如果您想要响应AJAX请求来呈现某些消息,则应该在响应中发送这些消息,并将它们呈现在您使用JavaScript编写的处理程序中。 在使用重定向时提供了闪烁的消息作为一种便利,但由于您使用的是AJAX,因此您可以跳过此中间步骤并直接返回消息。
问题在于AJAX调用不会重新渲染DOM。
作为调用的结果,Javascript将收回呈现的模板。
我会想象在jQuery的返回响应中,闪存消息就在这个范围内。
浏览器不会将返回的值视为要呈现的内容。
链接地址: http://www.djcxy.com/p/71911.html