You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将HTML表单数据保存至服务器并在Raspberry Pi项目中调用?

嘿,这个需求我熟!刚好树莓派上用轻量的技术栈就能搞定,我给你一步步拆解:

整体思路

咱们需要搭一个轻量的后端服务来接收表单提交的数据,把数据存在本地数据库里(用SQLite就够,不用额外装数据库服务),之后树莓派的项目要么直接读数据库,要么通过后端接口拿数据就行。我用Flask来做后端,它简单易部署,完美适配树莓派。

第一步:准备树莓派的后端环境

先在树莓派上装必要的依赖包,打开终端跑这个命令:

pip install flask flask-sqlalchemy

flask是后端框架,flask-sqlalchemy帮咱们简化数据库操作。

第二步:编写后端代码(app.py)

新建一个叫app.py的Python文件,把下面的代码粘进去——我已经加了注释,你能看懂每部分干啥的:

from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

# 初始化Flask应用
app = Flask(__name__)
# 配置SQLite数据库,文件会存在当前目录的events.db里
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///events.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# 定义数据模型:存事件名称和创建时间
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    event_name = db.Column(db.String(100), nullable=False)  # 事件名称,不能为空
    created_at = db.Column(db.DateTime, default=datetime.utcnow)  # 自动记录提交时间

# 第一次运行时创建数据库表
with app.app_context():
    db.create_all()

# 处理表单提交的接口
@app.route('/save-event', methods=['POST'])
def save_event():
    # 从表单里拿用户输入的Event字段
    event_name = request.form.get('Event')
    if event_name:
        # 创建新的事件记录并存入数据库
        new_event = Event(event_name=event_name)
        db.session.add(new_event)
        db.session.commit()
        return "事件保存成功!"
    return "请输入事件名称哦~"

# 供树莓派项目调用的获取数据接口
@app.route('/get-events', methods=['GET'])
def get_events():
    # 按时间倒序获取所有事件
    events = Event.query.order_by(Event.created_at.desc()).all()
    # 转成JSON格式方便解析
    event_list = [{"id": e.id, "event": e.event_name, "date": e.created_at.strftime("%Y-%m-%d %H:%M:%S")} for e in events]
    return {"events": event_list}

# 启动服务:允许外部访问,端口用5000,调试模式方便开发
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
第三步:修改你的前端表单代码

原来的表单没指定提交地址和方法,得改一改。把你的HTML存到一个templates文件夹里(Flask默认找这个文件夹下的模板),命名为index.html,修改后的代码如下:

<div class='alertBox' id='box'>
    <p id='displayDate'></p>
    <br>
    <!-- 指定表单提交到咱们后端的/save-event接口,用POST方法 -->
    <form action="/save-event" method="POST">
        <input name='Event' type='text' placeholder='Event'>
        <br>
        <input type='submit' name='save' value='save'>
    </form>
    <br>
    <a onclick='unpop()' class='close'>Close</a>
</div>

<!-- 可选:给displayDate加上当前时间 -->
<script>
document.getElementById('displayDate').textContent = new Date().toLocaleString();
function unpop() {
    document.getElementById('box').style.display = 'none';
}
</script>
第四步:部署和测试
  1. 在终端里进入app.py所在的目录,跑python app.py启动服务。
  2. 打开浏览器,访问http://你的树莓派IP地址:5000,输入事件点save,数据就会存在events.db里了。
  3. 访问http://你的树莓派IP地址:5000/get-events,就能看到所有事件的JSON数据啦。
第五步:在树莓派项目中使用数据

有两种简单的方式:

  • 直接读SQLite数据库:如果你的树莓派项目是Python写的,直接连数据库查数据:
import sqlite3

# 连接数据库
conn = sqlite3.connect('events.db')
cursor = conn.cursor()

# 查询所有事件(按时间倒序)
cursor.execute("SELECT event_name, created_at FROM event ORDER BY created_at DESC")
events = cursor.fetchall()

# 打印结果
for event in events:
    print(f"事件:{event[0]},提交时间:{event[1]}")

# 关闭连接
conn.close()
  • 通过后端API获取:用requests库调用接口拿数据:
import requests

# 调用本地的get-events接口
response = requests.get('http://localhost:5000/get-events')
if response.status_code == 200:
    events = response.json()['events']
    for event in events:
        print(f"ID: {event['id']}, 事件: {event['event']}, 时间: {event['date']}")
小提醒
  • 如果要从外部设备访问树莓派的服务,记得开放5000端口,终端跑ufw allow 5000就行(如果开了防火墙的话)。
  • 调试模式别在正式环境用,稳定运行的话可以换Gunicorn或者uWSGI来启动Flask服务。
  • 要加更多表单字段的话,只需要修改Event模型和前端对应的输入框就行。

内容的提问来源于stack exchange,提问作者Max Bauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:44:41