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

如何修复Flask中Error 405 Method Not Allowed错误?

问题分析与修复方案

核心问题1:表单提交路径不匹配

你的模板中表单的action属性是/sort-review(连字符),但Flask路由定义的是/sort_review(下划线),路径不一致会导致POST请求被路由到错误端点,进而引发后续静态资源请求的异常。

修复:将模板中的表单action改为与路由一致:

<form action="/sort_review" method="post">

核心问题2:Query对象属性访问错误

在confirm分支中,r = UnsortedReview.query.filter_by(id=CURRENT_ID)返回的是Query对象而非数据库实例,直接访问r.review会抛出AttributeError。

修复:添加.first()获取实例并增加空值判断:

elif "confirm" in request.form:
    r = UnsortedReview.query.filter_by(id=CURRENT_ID).first()
    if r:
        review = r.review
        db.session.delete(r)
        db.session.commit()
        # 补充name字段(SortedReview模型必填)
        d = SortedReview(name=r.name, review=review)
        db.session.add(d)
        db.session.commit()

核心问题3:SortedReview缺少必填字段

SortedReview模型定义了name字段且nullable=False,但创建实例时只传入了review,会触发数据库完整性错误,需要从UnsortedReview中同步name字段。

核心问题4:全局CURRENT_ID的线程安全隐患

使用全局变量CURRENT_ID存储当前评论ID,多管理员同时操作时会互相干扰,导致错误的评论被删除或转移。

修复:通过表单隐藏字段传递当前评论ID:

  1. 在模板表单中添加隐藏字段:
<form action="/sort_review" method="post">
    <input type="hidden" name="review_id" value="{{ tmp.id }}">
    <!-- 原有表单内容不变 -->
</form>
  1. 在路由中通过request.form获取ID,删除全局变量:
# 删除global CURRENT_ID声明
if request.method == "POST":
    review_id = request.form.get('review_id')
    if not review_id:
        pass
    if "reject" in request.form:
        UnsortedReview.query.filter_by(id=review_id).delete()
        db.session.commit()
    elif "confirm" in request.form:
        r = UnsortedReview.query.filter_by(id=review_id).first()
        if r:
            review = r.review
            db.session.delete(r)
            db.session.commit()
            d = SortedReview(name=r.name, review=review)
            db.session.add(d)
            db.session.commit()
# 后续获取tmp后,无需设置CURRENT_ID,直接传递给模板即可

静态资源405错误的根源

静态资源的405 Method Not Allowed错误是因为表单提交到错误路径后,服务器返回的页面路径解析异常,或错误路由匹配到了静态资源路径。修复表单提交路径后,该问题会随之解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:56:58