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

FastAPI中Postman访问/users/signup路由返回404错误求助

FastAPI /users/signup 404 Not Found 问题排查与解决

问题根源分析

  • 路由未注册到主应用:main.py里创建了包含user_router的APIRouter实例,但没把这个路由挂载到FastAPI的app上,导致所有/users前缀的接口都没被识别,直接返回404。
  • 请求方法不符合场景:signup接口用了GET方法,而注册操作需要提交请求体,GET方法不仅违背HTTP语义(GET用于获取资源,POST才是提交数据的正确方式),部分工具(包括Postman)对GET请求体的支持也存在问题,无法正确传递参数。

修复步骤

1. 修复main.py的路由挂载

在main.py中新增一行代码,把总路由挂载到主应用上:

import os
import sys
from .database import init_db
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
baseurl = os.path.dirname(os.path.abspath(__file__))
from fastapi import FastAPI, APIRouter
from .routers.user import router as user_router
from .routers.article import router as article_router
from fastapi.middleware.cors import CORSMiddleware


router = APIRouter()
router.include_router(user_router, prefix="/users",tags=["users"])
router.include_router(article_router, prefix="/articles",tags=["articles"])
app = FastAPI()
origins = ["http://localhost:3000"]
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 新增:将总路由挂载到主应用
app.include_router(router)

@app.on_event("startup")
async def on_startup():
    await init_db()
@app.get("/")
async def root():
    return {"message ": " Welcome Fastapi"}

@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}

2. 修改user.py的signup请求方法

把signup接口的GET改为POST,适配提交数据的业务场景:

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

import app.repository.user as dao
from app.admin.utils import currentTime
from app.database import get_db
from app.schemas.user import UserDTO
from app.admin.utils import currentTime

router = APIRouter()

# 将@router.get改为@router.post
@router.post("/signup")
async def signup(user: UserDTO, db: Session = Depends(get_db)):
    print(f" 회원가입에 진입한 시간: {currentTime()} ")
    print(f"SignUp Inform : {user}")
    result = dao.signup(user, db)
    if result == "":
        result = "failure"
    return {"data": result}

# 其余代码保持不变
@router.post("/login")
async def login(user: UserDTO, db: Session = Depends(get_db)):
    return_user = dao.login(user, db)
    print(f"로그인 정보 : {return_user}")
    return {"data": return_user}

@router.put("/modify/{id}")
async def update(id: str, item: UserDTO, db: Session = Depends(get_db)):
    dao.update(id, item, db)
    return {"data": "success"}

@router.delete("/delete/{id}", tags=['age'])
async def delete(id: str, item: UserDTO, db: Session = Depends(get_db)):
    dao.delete(id, item, db)
    return {"data": "success"}

@router.get("/page/{page}")
async def get_users(page: int, db: Session = Depends(get_db)):
    ls = dao.find_users(page, db)
    return {"data": ls}

@router.get("/email/{id}")
async def get_user(id: str, db: Session = Depends(get_db)):
    dao.find_user(id, db)
    return {"data": "success"}

@router.get("/point/{search}/{page}")
async def get_users_by_point(search: int, page: int, db: Session = Depends(get_db)):
    dao.find_users_by_point(search, page, db)
    return {"data": "success"}

3. Postman请求配置

  • 请求方法选择POST
  • 请求地址:http://127.0.0.1:8000/users/signup
  • 请求体选择raw -> JSON,粘贴以下内容:
{"user_email": "hong@naver.com", "id": "hong1234", "username": "홍길동", "password": "hong1234", "cpassword": "hong1234"}

验证

重启FastAPI服务后发送请求,就能收到{"data": "success"}的响应,同时数据会正常存入数据库。

内容的提问来源于stack exchange,提问作者안상호

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:05:23