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

使用FastAPI与SQLAlchemy执行删除操作时遭遇405错误求助

FastAPI + SQLAlchemy 删除接口返回405 Method Not Allowed错误

我是API开发新手,正在跟随YouTube教程学习,目前在使用FastAPI和SQLAlchemy执行删除操作时遇到问题。使用Postman测试API时,每次发送Delete请求都会返回405错误。我检查了代码但未找到问题所在,希望有人能提供帮助。

以下是我的代码示例:

@app.delete("posts/{id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_posts(id: int,db: Session=Depends(get_db)):    
    # cur.execute("DELETE FROM posts WHERE id=%s RETURNING * ", (str(id),))    
    # deleted_post = cur.fetchone()    
    # conn.commit()    
    post = db.query(models.Post).filter(models.Post.id==id)    
    if post.first() == None:        
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"post with {id} not found!")    
    post.delete(synchronize_session=False)    
    db.commit()    
    return Response(status_code=status.HTTP_204_NO_CONTENT)    

同时附上:

我排查代码后仍未发现问题。


可能的排查方向及解决方案

  1. 路由路径格式问题
    FastAPI的路由路径需要以斜杠/开头,否则可能无法正确匹配请求路径。将路由装饰器修改为:
@app.delete("/posts/{id}", status_code=status.HTTP_204_NO_CONTENT)

这是最常见导致405错误的原因,不带开头斜杠的路径会被视为相对路径,容易和应用根路由匹配规则冲突。

  1. Postman请求配置验证
  • 确认请求方法选择的是DELETE,而非GET/POST等其他方法;
  • 检查请求URL是否完全匹配路由路径,比如http://localhost:8000/posts/1(假设端口为8000),确保id是路径参数而非查询参数;
  • 重新创建Postman请求,避免旧缓存或错误配置干扰。
  1. 路由重复定义冲突
    检查项目中是否存在其他相同路径的路由定义(比如@app.get("posts/{id}")同样未加开头斜杠),FastAPI可能优先匹配错误路由,导致DELETE请求被拒绝。确保所有路由路径统一以/开头。

  2. 中间件或CORS设置问题

  • 若配置了自定义中间件,检查是否拦截了DELETE请求;
  • 启用CORS时,确保CORSMiddleware的allow_methods包含"DELETE",示例:
from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],  # 或明确指定包含"DELETE"
    allow_headers=["*"],
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:44:57