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

Flask+HTML+MySQL环境下POST请求出现405错误的技术求助

解决Flask POST请求405错误及用户凭证存储问题

问题根源

你的代码存在几个关键问题,直接导致了HTTP 405方法不允许错误:

  • 表单action直接指向index.py,但Flask是基于URL路由工作的,并非直接映射Python文件
  • 两个路由都绑定到根路径/,GET请求会优先匹配第一个home函数,POST请求无法找到正确的处理入口
  • 条款按钮未设置type="button",会意外触发表单提交

修正步骤

1. 修正HTML表单

修改表单的action为根路径/,并给条款按钮添加type="button"避免误提交:

<!-- 修正后的表单核心代码 -->
<form method="post" action="/">
    <!-- 原有输入项保持不变 -->

    <!-- 修正条款按钮,添加type="button" -->
    <button type="button" onclick="window.location.href='termsandprivacy.html'">
        <p>By creating an account you agree to our <a href="#" style="color:dodgerblue">Terms & Privacy</a>.</p>
    </button>

    <div class="clearfix">
        <button name="submit" id="subm" type="submit" class="signupbtn">[ E N T E R]</button>
    </div>
</form>

同时注意补全未闭合的<style>标签,避免页面渲染异常。

2. 合并Flask路由

将两个根路径路由合并,统一处理GET和POST请求,消除路由冲突:

from flask import Flask, render_template, request
import mysql.connector

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST':
        # 处理POST请求,存储用户数据
        username = request.form['username']
        email = request.form['email']
        password = request.form['password']

        # 数据库操作
        db = mysql.connector.connect(
            host='localhost',
            user='root',
            password='///',
            database='///'
        )
        cursor = db.cursor()
        sql = "INSERT INTO users (username, email, password) VALUES (%s, %s, %s)"
        val = (username, email, password)
        cursor.execute(sql, val)
        db.commit()
        
        # 关闭数据库连接,避免资源泄漏
        cursor.close()
        db.close()
        
        return 'Success!'
    # GET请求返回注册页面
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True) # 开启调试模式方便排查问题

3. 额外安全建议

  • 禁止明文存储密码:使用werkzeug.security模块的generate_password_hash对密码哈希后再存入数据库,用check_password_hash验证密码
  • 后端二次校验:在后端重复验证密码长度、邮箱格式等,防止前端验证被绕过
  • 异常处理:添加try-except块捕获数据库连接或操作错误,返回友好提示

测试流程

  1. 启动Flask应用和MySQL服务
  2. 访问http://localhost:5000填写表单提交,正常情况下会显示"Success!",同时数据库中新增用户记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:29:58