[请参阅问题底部的第二个编辑]
[编辑:此问题被标记为"确切"提供前两个问题/答案的副本。我现在已经仔细阅读了几次,但我无法看到他们在哪里解决我的问题。他们所解决的方法 - 如果使用JS / AJAX / jquery将表单数据发送到服务器可能会很有用,如果事实证明没有办法让Flask处理发布请求中的数据而不返回新的页面到客户端。 澄清: 我没有*试图让表单数据在自己的页面上进行更改。我可以看到我可以将Flask排除在外并且只使用JS,但这不是我想要发生的事情。事实是,我不希望对页面本身进行任何更改(除了使用Bootstrap / jquery启动模式),我只想将表单数据发送到Flask并让它对它做一些事情。那么,这里的原始问题又是]:
我在使用Bootstrap作为前端的网页上使用Python(3.6.4)Flask和Flask-Mail。在Flask从页面上的联系表单发送电子邮件之后,我希望Bootstrap启动一个"模式"弹出现有页面以确认提交。一旦用户点击" OK"模态上的按钮,弹出窗口应该消失,页面上没有任何其他更改,包括其滚动位置(表单位于页面底部)。顺便说一下,提交联系表单的同一个按钮也应该启动模式 - 我已经单独测试了它。我还对表单进行了全面测试,并按照程序设置发送电子邮件(以及我的config.py模块中邮件的所有常用设置)。这是我的routes.py模块中的代码:
@app.route('/process_contact', methods=['POST'])
def process_contact():
name = request.form['name']
email = request.form['email']
message = request.form['message']
text = 'From: ' + name +'\n\nEmail: ' + email + '\n\nMessage: ' + message
html = 'From: ' + name +'<p>Email: ' + email + '<p>Message: ' + message
send_email('New contact form message', 'contactform@pdxspot.com',
['contact@pdxspot.com'], text, html,)
现在,为了在没有werkzeug错误的情况下测试它,我不得不返回&#34;什么,所以我坚持:
return 'Name: ' + name + '/ Email: ' + email + '<hr>Message: ' + message
那当然把我带到了一个只包含连接的新页面。通过这种解决方法,我能够确认电子邮件是否正如他们应该发送到外部服务器。
问题是,我不想&#34;返回&#34;一个不同的页面。我希望现有页面保持原位,并使用Bootstrap模式来完成它的工作。换句话说, 所有 我希望我的装饰process_contact()函数可以处理和发送电子邮件,并且 - 暂时 - 离开&#34 ;视图&#34;由Bootstrap管理。关于SO的类似问题和答案似乎围绕着我的问题进行了围绕,但没有一个集中在它上面。有没有办法可以做到这一点?感谢。
[第二次编辑] :我在这里找到了问题的答案并解决了我的问题: Creating a view function without returning a response in Flask。很简单。只是&#34;返回&#34;空字符串和状态代码204:
return '', 204
客户端没有任何明显改变,现在我的Bootstrap模式完全按照我想要的方式由提交按钮触发。感谢回复和Gray Li的回答。