Flask 按按钮发送电子邮件和';残疾人士';文本区域字段

Flask 按按钮发送电子邮件和';残疾人士';文本区域字段,flask,flask-wtforms,Flask,Flask Wtforms,我正在使用Flask创建我的网页。我在网络和电子邮件中添加了“联系我们”部分,一切正常,除了我试图在用户按下发送按钮后立即禁用文本的部分。现在,当用户按下“发送电子邮件”按钮时,页面开始加载,几秒钟后最终发送电子邮件,这是正常的。问题是,在这几秒钟内,用户仍然可以在文本区域中写入内容,按下按钮后写入的内容不包括在电子邮件中,但我希望在按下按钮后文本区域立即被“禁用”。我试过这个: @main.route('/Contactus', methods=['POST', 'GET']) def Con

我正在使用Flask创建我的网页。我在网络和电子邮件中添加了“联系我们”部分,一切正常,除了我试图在用户按下发送按钮后立即禁用文本的部分。现在,当用户按下“发送电子邮件”按钮时,页面开始加载,几秒钟后最终发送电子邮件,这是正常的。问题是,在这几秒钟内,用户仍然可以在文本区域中写入内容,按下按钮后写入的内容不包括在电子邮件中,但我希望在按下按钮后文本区域立即被“禁用”。我试过这个:

@main.route('/Contactus', methods=['POST', 'GET'])
def ContactUs():
    form=ContactUsForm()
    if form.validate_on_submit():
        form.email.render_kw = {'disabled': 'disabled'}
        form.title.render_kw = {'disabled': 'disabled'}
        form.text.render_kw = {'disabled': 'disabled'}
        email = form.email.data
        subject = form.title.data
        body = form.text.data
        contat= [email,subject,body]
        contat_us(contat)
        flash(f'Thanks for your email. Soon we will contact you through your email: {form.email.data}.', 'success')
        return redirect(url_for("main.home"))
    return render_template('Contactus.html', title='Contac us', form=form)
if form.validate_on_submit():
        form.email.render_kw = {'disabled': 'disabled'}
        form.title.render_kw = {'disabled': 'disabled'}
        form.text.render_kw = {'disabled': 'disabled'}
if form.validate_on_submit():
        email = form.email.data
        subject = form.title.data
        body = form.text.data
        contat= [email,subject,body]
        contat_us(contat)
        flash(f'Thanks for your email. Soon we will contact you through your email: {form.email.data}.', 'success')
        return redirect(url_for("main.home"))
我认为问题在于“如果”同时运行,我尝试了以下方法:

@main.route('/Contactus', methods=['POST', 'GET'])
def ContactUs():
    form=ContactUsForm()
    if form.validate_on_submit():
        form.email.render_kw = {'disabled': 'disabled'}
        form.title.render_kw = {'disabled': 'disabled'}
        form.text.render_kw = {'disabled': 'disabled'}
        email = form.email.data
        subject = form.title.data
        body = form.text.data
        contat= [email,subject,body]
        contat_us(contat)
        flash(f'Thanks for your email. Soon we will contact you through your email: {form.email.data}.', 'success')
        return redirect(url_for("main.home"))
    return render_template('Contactus.html', title='Contac us', form=form)
if form.validate_on_submit():
        form.email.render_kw = {'disabled': 'disabled'}
        form.title.render_kw = {'disabled': 'disabled'}
        form.text.render_kw = {'disabled': 'disabled'}
if form.validate_on_submit():
        email = form.email.data
        subject = form.title.data
        body = form.text.data
        contat= [email,subject,body]
        contat_us(contat)
        flash(f'Thanks for your email. Soon we will contact you through your email: {form.email.data}.', 'success')
        return redirect(url_for("main.home"))

但仍然不起作用。在按下“发送按钮”后,是否有办法使禁用文本的行在其余行之前运行?

您可以在网页中使用javascript在单击文本区域和按钮后立即禁用该文本区域和按钮。(使用JQuery之类的工具可能更容易编写)


此外,从用户体验的角度来看,在主事件循环中发送邮件并不好。您可以使用芹菜或线程之类的东西异步发送邮件。

所谓“异步”是指不同的功能吗?像这样的
def sendmail(contat):contat_us(contat)
Yes,应该从线程调用该函数。(请参阅中的“异步电子邮件”标题)非常感谢。我要试试那个博客上的说明。我想象如果我调用另一个函数,代码中的“if”将结束进程,因此在发送电子邮件之前文本区域将被禁用。正确吗?在函数中分离GET&POST请求(
if-request.method=='POST':
),并返回适当的参数,如disabled等。您好,同样,if-request.method=='POST':的方法不起作用,我以前测试过。我不知道
POST
检查和
validate\u on\u submit
检查是否同时运行,但最后,我遇到了同样的问题。博客(link)中的解决方案确实非常有效;但是,我配置Flask应用程序的方式不允许我按照博客中的建议调用“应用程序”(
args=(app,msg)
)。