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

Flask项目访问登录页提示Method Not Allowed错误求助

Flask "Method Not Allowed" 错误修复方案

你的代码存在几个关键问题,导致登录页面出现异常,以下是修复步骤和对应解释:

1. 完善Login路由的请求处理逻辑

当前login函数仅处理了POST请求,当用户通过GET方式访问/login时,函数没有返回任何响应,这会触发服务器内部错误,可能被误显示为"Method Not Allowed"。需要在函数末尾补充GET请求的返回逻辑:

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method == 'POST':
        username = request.form["Username"]
        password = request.form["Password"]
        check_user = Users.query.filter_by(username=username).first()
        if check_user and check_user.check_password(password):
            session["username"] = username
            return redirect(url_for("dashboard"))
        else:
            # 登录失败时返回页面,可添加错误提示
            return render_template('login.html', error="用户名或密码错误")
    # 处理GET请求,返回登录页面
    return render_template('login.html')

2. 修正数据库模型的密码存储逻辑

你的Users模型定义了password字段,但set_password方法却将哈希值存入了不存在的password_hash属性,导致密码从未正确写入数据库,调用check_password时会抛出属性错误。需要修改模型方法,将哈希值存入数据库的password字段:

class Users(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(25),unique=True,nullable=False)
    password = db.Column(db.String(125),nullable=False)
    
    def set_password(self,password):
        # 将哈希值存入数据库的password字段
        self.password = generate_password_hash(password)
        
    def check_password(self,password):
        # 从password字段读取哈希值进行验证
        return check_password_hash(self.password,password)

3. 补充缺失的路由

当前代码中index路由重定向到home,login路由重定向到dashboard,但这两个路由均未定义,会导致跳转后出现404错误,需要补充对应路由:

# 补充home路由
@app.route("/home")
def home():
    if "username" not in session:
        return redirect(url_for('login'))
    return render_template('home.html', username=session["username"])

# 补充dashboard路由
@app.route("/dashboard")
def dashboard():
    if "username" not in session:
        return redirect(url_for('login'))
    return render_template('dashboard.html', username=session["username"])

4. 规范代码缩进

确保login函数内的代码缩进统一(Python要求使用4个空格或1个制表符),避免因缩进错误导致代码逻辑未被正确识别。

额外建议

  • 在登录失败时,可通过模板参数传递错误提示,帮助用户明确失败原因
  • 确保home.html、dashboard.html等模板文件已创建,避免渲染时出现文件缺失错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:15:55