0

0

如何在Flask中从HTML按钮获取变量值

聖光之護

聖光之護

发布时间:2025-10-25 09:26:47

|

363人浏览过

|

来源于php中文网

原创

如何在Flask中从HTML按钮获取变量值

本教程详细讲解了如何在flask应用中,通过html表单的post请求,安全有效地从按钮(或其他表单元素)获取动态变量值。我们将重点介绍html `

` 标签的 `method` 属性配置,以及flask后端如何使用 `request.form` 对象正确解析提交的数据,并提供完整的代码示例。

在Web开发中,从用户界面(HTML)收集数据并将其传递到后端服务器(Flask)是一个核心功能。当用户点击一个按钮时,如果该按钮承载了特定的数据(例如一个发票号),我们需要确保这些数据能够被Flask应用正确接收和处理。本教程将深入探讨这一过程,特别是当数据通过HTML按钮的 value 属性传递时。

理解表单数据提交机制

当用户与网页上的表单交互并提交时,浏览器会将表单数据打包并发送到服务器。这个发送过程的关键在于HTML

标签的 method 属性。method 属性决定了数据如何被发送,主要有两种方式:GET 和 POST。

GET vs. POST:选择正确的提交方法

  1. GET 请求:

    • 特点: 数据会附加在URL的查询字符串中。例如,如果表单字段 name="invoice_no" 的值为 3,提交后URL可能变为 /transactions?invoice_no=3。
    • 适用场景: 适用于不敏感、幂等(多次请求结果相同)的操作,如搜索查询、页面导航、书签。
    • Flask中获取数据: 在Flask后端,通过 request.args.get('invoice_no') 来获取GET请求中的数据。
    • 默认行为: 如果在 标签中不指定 method 属性,它将默认为 GET。
  2. POST 请求:

    立即学习前端免费学习笔记(深入)”;

    • 特点: 数据放在HTTP请求体中,不会显示在URL中,因此更适合发送敏感信息(如密码)或大量数据。
    • 适用场景: 适用于数据创建、修改、删除等操作,或发送包含敏感信息的表单。
    • Flask中获取数据: 在Flask后端,通过 request.form.get('invoice_no') 来获取POST请求中的数据。
    • 显式指定: 必须在
      标签中显式指定 method="post"。

对于从按钮获取动态值并进行某种操作(例如选择一个发票),通常推荐使用 POST 请求,因为它更适合处理状态变更和非幂等操作。

HTML 表单设计:按钮与变量

为了将按钮上的动态值发送到Flask后端,我们需要正确配置HTML表单和按钮。

  1. 标签:
    必须包含 method="post" 属性。
    • type="submit":确保按钮能够触发表单提交。
    • name="variable_name":这是在后端用于识别数据的键。
    • value="{{ dynamic_value }}":这是按钮被点击时发送到服务器的值。Jinja2模板引擎可以用来动态地填充这个值。

示例HTML代码 (templates/index.html):

千图设计室AI海报
千图设计室AI海报

千图网旗下的智能海报在线设计平台

下载



    
    
    选择发票
    
    


    

发票列表

{% for invoice in invoices %} {% endfor %}
发票号 操作
{{ invoice.invoice_no }}

在上述HTML代码中,我们为每个发票创建了一个独立的

,并将其 method 设置为 post。按钮的 name 属性是 invoice_no,其 value 属性通过Jinja2动态地设置为 {{ invoice.invoice_no }}。当用户点击“选择发票”按钮时,invoice_no 的值将通过POST请求发送到 /transactions 路由

Flask 后端处理:接收与解析数据

在Flask应用中,我们需要创建一个路由来处理来自HTML表单的POST请求,并从中提取数据。

示例Flask代码 (app.py):

from flask import Flask, render_template, request, redirect, url_for, flash

app = Flask(__name__)
app.secret_key = 'super_secret_key' # 用于flash消息等,生产环境应更复杂

# 模拟发票数据
mock_invoices = [
    {'invoice_no': 1001, 'amount': 150.00},
    {'invoice_no': 1002, 'amount': 230.50},
    {'invoice_no': 1003, 'amount': 75.20}
]

@app.route('/')
def index():
    """渲染显示发票列表的页面"""
    return render_template('index.html', invoices=mock_invoices)

@app.route('/transactions', methods=['POST'])
def handle_transaction():
    """处理来自HTML表单的POST请求,获取发票号"""
    # 检查请求方法是否为POST
    if request.method == "POST":
        # 使用 request.form.get() 安全地获取数据
        # 'invoice_no' 对应于HTML按钮的 name 属性
        invoice_number = request.form.get('invoice_no')

        if invoice_number:
            print(f"从按钮获取到的发票号是: {invoice_number}")
            flash(f"已成功选择发票号: {invoice_number}", 'success')
            # 可以在这里执行进一步的业务逻辑,例如查询数据库、更新状态等
            # 示例:重定向回首页或显示详情页
            return redirect(url_for('index'))
        else:
            flash("未接收到发票号。", 'danger')
            return redirect(url_for('index'))
    # 如果不是POST请求,理论上不会进入这里,但作为良好实践可以处理
    flash("请求方法不正确。", 'danger')
    return redirect(url_for('index'))

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

代码解释:

  1. @app.route('/transactions', methods=['POST']): 这个装饰器定义了一个路由,它只响应 POST 请求。如果收到 GET 请求,Flask会返回“Method Not Allowed”错误。
  2. if request.method == "POST":: 尽管路由已经指定了 methods=['POST'],但在视图函数内部再次检查 request.method 是一种良好的编程习惯,以确保代码逻辑只在正确的请求类型下执行。
  3. invoice_number = request.form.get('invoice_no'): 这是从POST请求体中获取数据的关键。
    • request.form 是一个字典状的对象,包含了所有通过POST请求提交的表单数据。键是HTML元素的 name 属性值,值是对应的 value 属性值。
    • .get('invoice_no') 方法用于安全地获取键为 invoice_no 的值。如果该键不存在,它会返回 None,而不是抛出 KeyError,这使得代码更加健壮。
  4. print(f"从按钮获取到的发票号是: {invoice_number}"): 打印接收到的发票号,用于调试。在实际应用中,您会在这里调用业务逻辑层来处理这个发票号。
  5. flash() 和 redirect(): 用于提供用户反馈并重定向到其他页面,提升用户体验。

运行与测试

  1. 将上述Flask代码保存为 app.py。
  2. 在与 app.py 同级的目录下创建 templates 文件夹。
  3. 将上述HTML代码保存为 templates/index.html。
  4. 运行Flask应用:python app.py。
  5. 在浏览器中访问 http://127.0.0.1:5000/。
  6. 点击任意一个“选择发票”按钮。
  7. 查看Flask控制台输出,您将看到类似 从按钮获取到的发票号是: 1001 的信息。

注意事项

  • 安全性: 永远不要直接信任来自客户端的数据。即使数据来自按钮的 value 属性,恶意用户也可以通过浏览器开发者工具修改这些值。在服务器端,务必对接收到的数据进行验证、清理和消毒,以防止SQL注入、XSS等安全漏洞。
  • 表单验证: 对于更复杂的表单,建议使用Flask-WTF等扩展来简化表单的创建和验证过程。
  • 用户体验: 提交表单后,应向用户提供明确的反馈(例如,成功消息、错误消息或重定向到相关页面),而不是仅仅打印到控制台。
  • CSRF 保护: 对于所有处理用户提交数据的POST请求,尤其是在生产环境中,务必实施CSRF(跨站请求伪造)保护。Flask-WTF提供了方便的CSRFToken支持。
  • HTTP 方法的语义: 遵循HTTP方法的语义。GET 用于获取资源,POST 用于提交数据创建/修改资源。不要混淆使用。

总结

通过本教程,我们详细了解了如何在Flask应用中从HTML按钮获取动态变量值。关键在于:

  1. HTML 标签必须明确指定 method="post"。 这是将数据通过请求体发送到服务器的基础。
  2. HTML
  3. Flask 后端使用 request.form.get('name_attribute') 来安全地获取 POST 请求中提交的数据。

正确配置HTML和Flask后端是实现Web应用中数据交互的基础,理解 GET 和 POST 请求的区别及其在Flask中的处理方式至关重要。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

716

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

627

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

742

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

CSS教程
CSS教程

共754课时 | 17.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号