当我使用表单操作提交表单数据时,我能够将消息闪回。
查看表格:
@app.route('/register') def register(): return render_template('register.html')
注册.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 %}
闪烁的消息存储为会话的一部分,并在服务器端呈现模板时检索。客户端JavaScript无法访问会话cookie。即使是这样,也不容易在JavaScript中解码。即使您可以解码它,也假定该会话是cookie,而不是存储在服务器或其他任何东西上。
如果要渲染一些消息以响应AJAX请求,则应在响应中发送这些消息,并在用JavaScript编写的处理程序中渲染它们。提供闪烁消息是为了方便使用重定向时,但由于使用的是AJAX,因此可以跳过此中间步骤,而直接返回消息。