新闻中心

Flask 表单提交后显示成功或失败消息的完整教程

2025-11-20
浏览次数:
返回列表

flask 表单提交后显示成功或失败消息的完整教程

本文旨在指导开发者在使用 Flask 框架构建的 Web 应用中,如何在表单提交后显示成功或失败消息。通过利用 Flask 的模板引擎和条件语句,我们可以根据表单处理的结果,向用户提供即时的反馈。本文将提供详细的代码示例和步骤,帮助你轻松实现这一功能。

利用 Flask 模板引擎显示消息

在 Flask 应用中,最常用的方法是在后端处理表单提交,并在模板中显示相应的消息。这种方法利用了 Flask 的模板引擎(通常是 Jinja2)的强大功能,允许我们根据变量的值动态地渲染 HTML 内容。

1. 后端 Flask 代码修改

首先,我们需要在 Flask 的路由函数中,根据表单处理的结果设置一个变量,并将该变量传递给模板。

from flask import Flask, render_template, request
import smtplib

MY_EMAIL = "your email"
MY_PASSWORD = "your pw"

app = Flask(__name__)

@app.route('/', methods=["GET", "POST"])
def home():
    success = False  # 初始化 success 变量
    if request.method == "POST":
        data = request.form
        print(data["name"])
        print(data["email"])
        print(data["phone"])
        print(data["message"])

        try:
            with smtplib.SMTP("smtp.gmail.com", port=587) as connection:
                connection.starttls()
                connection.login(user=MY_EMAIL, password=MY_PASSWORD)
                connection.sendmail(
                    from_addr=MY_EMAIL,
                    to_addrs=MY_EMAIL,
                    msg=f"Subject:New Message\n\nName: {data['name']}\nEmail: {data['email']}\nPhone: {data['phone']}\nMessage: {data['message']}"
                )
            success = True  # 邮件发送成功
        except Exception as e:
            print(f"Error sending email: {e}")
            success = False  # 邮件发送失败

        return render_template("index.html", success=success)
    return render_template("index.html", success=False)

if __name__ == "__main__":
    app.run(debug=True)

在这个例子中,我们添加了一个 success 变量,它的值取决于邮件是否成功发送。然后,我们将 success 变量传递给 index.html 模板。

注意: 务必处理异常情况,例如邮件发送失败,并将 success 设置为 False,以便在前端显示错误消息。

Kreado AI Kreado AI

Kreado AI是一个多语言AI视频创作平台,只需输入文本或关键词,即可创作真实/虚拟人物的多语言口播视频。 为创作者提供AI赋能

Kreado AI 182 查看详情 Kreado AI

2. 前端 HTML 代码修改

接下来,我们需要在 HTML 模板中使用 Jinja2 的条件语句来显示成功或失败消息。

<!-- Contact-->
<section class="resume-section" id="contact">
    <div class="container">
        <div class="resume-section-content">
            <h2 class="mb-0">Contact Me</h2>
            <div class="subheading mb-5">
            If you are interested in me, I would love to hear it.
            </div>
        </div>
        <form id="contactForm" action="{{ url_for('home') }}" method="post">
            <!-- 表单内容 -->
            <div class="row align-items-stretch mb-5">
                <div class="col-md-6">
                    <div class="form-group">
                        <!-- Name input-->
                        <input class="form-control" id="name" name="name" type="text" placeholder="Your Name *" data-sb-validations="required" />
                        <div class="invalid-feedback" data-sb-feedback="name:required">A name is required.</div>
                    </div>
                    <div class="form-group">
                        <!-- Email address input-->
                        <input class="form-control" id="email" name="email" type="email" placeholder="Your Email *" data-sb-validations="required,email" />
                        <div class="invalid-feedback" data-sb-feedback="email:required">An email is required.</div>
                        <div class="invalid-feedback" data-sb-feedback="email:email">Email is not valid.</div>
                    </div>
                    <div class="form-group mb-md-0">
                        <!-- Phone number input-->
                        <input class="form-control" id="phone" name="phone" type="tel" placeholder="Your Phone *" data-sb-validations="required" />
                        <div class="invalid-feedback" data-sb-feedback="phone:required">A phone number is required.</div>
                    </div>
                </div>
                    <div class="col-md-6">
                        <div class="form-group form-group-textarea mb-md-0">
                            <!-- Message input-->
                            <textarea class="form-control" id="message" name="message" placeholder="Your Message *" data-sb-validations="required"></textarea>
                            <div class="invalid-feedback" data-sb-feedback="message:required">A message is required.</div>
                        </div>
                    </div>
                </div>

            <!-- Submit Button-->
            <div class="text-center">
                <button class="btn btn-primary btn-xl text-uppercase" id="submitButton" type="submit">Send Message</button>
            </div>
        </form>

        <!-- 显示消息 -->
        {% if success %}
            <div class="alert alert-success" role="alert">
                邮件已成功发送!
            </div>
        {% else %}
            <div class="alert alert-danger" role="alert">
                邮件发送失败,请检查您的网络连接或稍后再试。
            </div>
        {% endif %}
    </div>
</section>

在这个例子中,我们使用了 {% if success %} 和 {% else %} 语句来根据 success 变量的值显示不同的消息。如果 success 为 True,则显示成功消息;否则,显示失败消息。使用了 Bootstrap 的 alert 类来美化消息框。

3. 代码解释和注意事项

  • success 变量: 这个变量用于指示表单处理是否成功。在 Flask 代码中,根据实际情况设置它的值。
  • Jinja2 条件语句: {% if ... %}、{% else %} 和 {% endif %} 是 Jinja2 模板引擎的条件语句,用于根据条件动态地渲染 HTML 内容。
  • 错误处理: 在实际应用中,务必进行完善的错误处理,以便向用户提供更友好的错误提示。
  • 安全性: 始终对用户输入进行验证和清理,以防止安全漏洞。

4. 总结

通过结合 Flask 的后端处理和 Jinja2 的前端模板,我们可以轻松地在表单提交后显示成功或失败消息。这种方法简单易懂,适用于各种 Web 应用。记住,良好的错误处理和用户反馈是构建高质量 Web 应用的关键。

以上就是Flask 表单提交后显示成功或失败消息的完整教程的详细内容,更多请关注其它相关文章!


# html  # word  # 杨凌交通网站建设方案  # 建设网站的心得体会范文  # 槐荫区引流营销推广制度  # seo网站制作哪家优惠  # 湛江服务网站优化效果  # 关键词竞价排名方法分析  # seo如何优化网站推广  # 哪里能网站优化公司  # 网站seo文章怎么写  # 香河seo哪家专业  # 多语言  # 自适应  # 用户提供  # 在这个  # 邮件发送  # 输入框  # 换行  # 表单  # 关键词  # red  # 表单提交  # 路由  # ai  # 后端  # app  # bootstrap  # 前端 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: J*aScript中高效管理与清空动态列表:避免循环陷阱  新手怎么开始学化妆 零基础化妆入门教程  j*a toString()的覆盖  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  抓大鹅无需下载版 抓大鹅秒玩版入口  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  iwriter统一登录平台 iwrite账号密码登录页面  在WordPress中通过REST API获取BasicAuth保护的远程文章  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  yy漫画网页版官方入口_yy漫画官网登录页面链接  小米14应用无法联网原因分析_小米14网络权限修复  解决Django多数据库/多Schema环境下外键迁移问题  学习通网页版快速入口 学习通官网网页版直接打开  mc.js游戏直达 mc.js网页免下载版本秒进地址  葱吃多了会怎样 葱吃多了会伤胃吗  解决移动端滚动问题的overflow属性应用指南  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  ArrayList与LinkedList核心操作的Big-O复杂度分析  HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  深入理解Go语言中的指针类型:以*string为例  Promise错误处理:在catch后终止链式then执行的策略  微信网页版扫码登录入口 微信网页版二维码登录入口  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  Mac怎么锁定备忘录_Mac备忘录加密设置教程  J*aScript数据结构转换:将对象数组按类别分组  58动漫网在线官方网 58动漫网正版动漫入口网址  外媒分析《GTA6》定价:卖100美元可以但真没必要!  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  html5 app怎么运行环境_配html5 app运行环境【教程】  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  微信聊天记录怎么加密_微信聊天记录加密方法  Win11怎么关闭快速启动_Win11彻底关机设置教程  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  J*aScript Promise链中如何正确终止后续.then执行并处理错误 

搜索