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

Flask登录页面出现501 Unsupported method ('POST')错误求助

解决Flask登录页面POST方法不支持的错误

核心问题:路由路径定义错误

你的错误根源在于登录路由的定义错误——Flask的路由参数应该是相对路径,而非完整的URL地址。当前代码里的@app.route("/http://localhost:5000//", methods=["GET", "POST"])会导致Flask无法正确识别POST请求的目标路径,从而返回501错误。

修正步骤

  1. 修改路由定义
    将登录路由改为正确的相对路径,比如根路径/或者专门的/login路径:

    @app.route("/", methods=["GET", "POST"])
    # 或者使用专门的登录路径:@app.route("/login", methods=["GET", "POST"])
    def login():
        # 原函数逻辑保持不变
    
  2. 检查前端模板的表单提交地址
    确保你的index.html中的表单action属性指向正确的路由:

    <!-- 如果路由是根路径/ -->
    <form method="POST" action="/">
    <!-- 如果路由是/login -->
    <form method="POST" action="/login">
        <!-- 表单内容 -->
    </form>
    

修正后的完整代码

from flask import Flask, render_template, request, redirect, url_for, session
from flask_mysqldb import MySQL, pymysql
import hashlib

app = Flask(__name__)
app.secret_key = "Core123"

# 数据库连接配置
app.config["MYSQL_HOST"] = "localhost"
app.config["MYSQL_USER"] = "root"
app.config["MYSQL_PASSWORD"] = "Core@123!"
app.config["MYSQL_DB"] = "pythonlogin"

# 初始化MySQL
mysql = MySQL(app)

# 修改为正确的路由路径
@app.route("/", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        username = request.form["username"]
        password = request.form["password"]

        # 生成哈希密码
        hash = hashlib.sha1((password + app.secret_key).encode()).hexdigest()

        cursor = mysql.connection.cursor()
        cursor.execute(
            "SELECT * FROM accounts WHERE username = %s AND password = %s",
            (username, hash),
        )
        account = cursor.fetchone()

        if account:
            session["loggedin"] = True
            session["id"] = account[0]
            session["username"] = account[1]
            return redirect(url_for("home"))
        else:
            msg = "Incorrect username/password!"
            return render_template("index.html", msg=msg)

    return render_template("index.html", msg="")


@app.route("/home")
def home():
    if "loggedin" in session:
        return "Logged in successfully!"
    else:
        return redirect(url_for("login"))


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

额外检查点

  • 确认Flask应用启动后,你访问的地址是http://localhost:5000/(对应根路由)或者http://localhost:5000/login(如果用了/login路由),不要在地址栏里重复添加路由路径。
  • 确保表单的method属性为POST(保持规范可避免潜在问题)。

内容的提问来源于stack exchange,提问作者Tha-Sethi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:14:53