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

Python+Flask操作MySQL遇Method Not Allowed错误求助

解决Flask中删除功能的"Method Not Allowed"错误

你遇到的这个错误核心原因很明确:你的Flask路由默认只接受GET请求,但删除操作的触发方式(比如表单提交、AJAX请求)大概率用的是POST方法,两者不匹配就会抛出这个报错。

问题拆解

先看你的路由定义:

@app.route('/delete_klas/<string:id>')

Flask的@app.route装饰器默认只允许GET请求。如果前端是通过表单(form标签)以POST方式提交删除请求,就会直接触发"Method Not Allowed"。另外,你的代码里还有个小疏漏:cur.close应该写成cur.close()(少了括号,游标无法被正确关闭)。

解决方案

方法1:修改路由支持POST方法(推荐)

按照HTTP规范,修改/删除数据应该用POST或DELETE方法,我们给路由加上methods参数来支持POST:

#delete klas
@app.route('/delete_klas/<string:id>', methods=['POST'])
@is_logged_in
def delete_klas(id):
    if 'count' in session.keys():
        session['count'] += 1
    else:
        session['count'] = 1
    #create cursor
    cur = mysql.connection.cursor()
    #execute
    cur.execute("DELETE FROM klassen WHERE id = %s", [id])
    #commit
    mysql.connection.commit()
    #close(这里补上括号)
    cur.close()
    flash('klas verwijdert', 'success')
    return redirect(url_for('intranet'))

同时前端要对应使用POST方式触发:

  • 如果是表单提交,确保表单的method="POST":
    <form action="/delete_klas/{{ klas.id }}" method="POST">
        <button type="submit">删除班级</button>
    </form>
    
  • 如果是AJAX请求,设置请求方法为POST即可。

方法2:允许GET方法(不推荐)

如果你一定要用GET请求触发删除(非常不建议,因为GET请求会被浏览器缓存,用户误刷新页面可能重复执行删除操作,存在安全风险),可以显式声明允许GET:

@app.route('/delete_klas/<string:id>', methods=['GET'])

然后用链接触发:

<a href="/delete_klas/{{ klas.id }}">删除班级</a>

再次提醒,这种方式不符合HTTP设计规范,尽量避免使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:47