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

Flask网站提交表单至app.py时出现404错误,数据无法写入数据库

Flask网站提交表单至app.py时出现404错误,数据无法写入数据库

看起来你遇到的404错误核心原因是表单的action路径设置错了,Flask作为Web框架,是通过路由规则来处理请求的,而不是直接访问app.py文件本身。下面我帮你一步步排查并修复所有问题:

1. 修复表单的Action路径(404的直接原因)

你的HTML表单里把action指向了文件系统路径/YR12--Assessments-Repository/Website/app.py,但Flask运行时,应用的根路径是/,所有请求都是通过你在app.py里定义的路由(比如@app.route('/'))来处理的。

修改表单的action为根路径/即可:

<form style="text-align: center;" method="POST" action="/">

2. 修复数据库表创建的语法错误

app.py里的CREATE TABLE语句有语法问题:VoterName TEXT后面缺少逗号,这会导致SQL执行失败,表无法正常创建。修正后的表创建代码:

create_table_query = '''
CREATE TABLE IF NOT EXISTS voters (
    VoterID INTEGER PRIMARY KEY AUTOINCREMENT,
    VoterName TEXT,
    VoterAge INTEGER,
    CandidateID INTEGER REFERENCES candidates(CandidateID)
)'''

3. 修正INSERT语句的字段匹配与安全问题

这里有两个关键问题需要解决:

  • 你的表字段是VoterName、VoterAge,但原来的INSERT语句用的是name、age,字段名不匹配会直接导致数据库报错;
  • 用字符串格式化拼接SQL语句存在严重的SQL注入漏洞,必须改用Flask+SQLite推荐的参数化查询方式。

同时,表单里的candidate字段也要同步写入数据库(对应表的CandidateID),修正后的POST处理代码:

@app.route('/', methods = ['POST'])
def send_to_database():
    votername = request.form['name']
    voterage = request.form['age']
    candidate_id = request.form['candidate']
    connection = sqlite3.connect('database.db')
    cursor = connection.cursor()
    # 用?作为占位符的参数化查询,从根源避免SQL注入
    query1 = "INSERT INTO voters (VoterName, VoterAge, CandidateID) VALUES (?, ?, ?)"
    cursor.execute(query1, (votername, voterage, candidate_id))
    connection.commit()
    connection.close() # 操作完成后务必关闭数据库连接
    return "投票提交成功!" # 可以返回提示,或者重定向回首页

4. 优化表单的Candidate选项值

你的select选项里value="id"语义模糊,建议改成真实的候选ID(比如1),这样存入数据库的ID更符合业务逻辑:

<option value="1">John Smith</option>

5. 确认项目文件结构

Flask默认会从templates文件夹加载模板文件,所以你的项目结构需要符合以下规范:

Website/
├── app.py
├── templates/
│   └── index.html  <!-- 你的HTML文件必须放在这个文件夹下 -->
└── database.db

做完以上修改后,重启Flask应用,访问http://localhost:5000提交表单,404错误应该就消失了,数据也能正确写入数据库啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:14:37