Flask登录页面出现501 Unsupported method ('POST')错误求助
解决Flask登录页面POST方法不支持的错误
核心问题:路由路径定义错误
你的错误根源在于登录路由的定义错误——Flask的路由参数应该是相对路径,而非完整的URL地址。当前代码里的@app.route("/http://localhost:5000//", methods=["GET", "POST"])会导致Flask无法正确识别POST请求的目标路径,从而返回501错误。
修正步骤
修改路由定义
将登录路由改为正确的相对路径,比如根路径/或者专门的/login路径:@app.route("/", methods=["GET", "POST"]) # 或者使用专门的登录路径:@app.route("/login", methods=["GET", "POST"]) def login(): # 原函数逻辑保持不变检查前端模板的表单提交地址
确保你的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
相关产品推荐
相关产品推荐

