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

Sanic服务器无法识别controller.py路由函数,如何解决404问题?

解决Sanic路由404问题:让controller中的路由被应用识别

出现404的核心原因是/views/controller.py中定义的路由未被Sanic应用实例加载,以下是两种可行的解决方法:

方法一:直接导入controller模块(适合小型项目)

  1. 确保controller.py中使用的是main.py创建的同一个Sanic实例:
# views/controller.py
from main import app
from sanic.response import json

@app.post("/get_x")
async def get_x(request):
    # 你的业务逻辑
    return json({"result": "success"})
  1. 在main.py中导入controller模块,触发路由注册:
# main.py
from sanic import Sanic
app = Sanic("MyApp")

# 导入controller,让路由被注册到app实例
from views import controller

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

方法二:使用蓝图Blueprint(推荐,适合中大型项目)

这种方式能避免循环导入问题,更清晰地管理路由:

  1. 在controller.py中定义蓝图并添加路由:
# views/controller.py
from sanic import Blueprint
from sanic.response import json

# 创建蓝图实例
bp = Blueprint("x_blueprint")

@bp.post("/get_x")
async def get_x(request):
    return json({"result": "success"})
  1. 在main.py中注册蓝图:
# main.py
from sanic import Sanic
from views.controller import bp

app = Sanic("MyApp")
# 注册蓝图到应用
app.blueprint(bp)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

额外检查项

  • 确认views目录是可导入的:目录下添加空的__init__.py文件(Python 3.3+可选,但建议添加)
  • 验证请求方法:该路由是POST方法,不要用GET请求访问,否则也会返回404
  • 查看启动日志:Sanic启动时会打印已注册的路由,确认POST /get_x出现在路由列表中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:15:59