Sanic服务器无法识别controller.py路由函数,如何解决404问题?
解决Sanic路由404问题:让controller中的路由被应用识别
出现404的核心原因是/views/controller.py中定义的路由未被Sanic应用实例加载,以下是两种可行的解决方法:
方法一:直接导入controller模块(适合小型项目)
- 确保
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"})
- 在
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(推荐,适合中大型项目)
这种方式能避免循环导入问题,更清晰地管理路由:
- 在
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"})
- 在
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
相关产品推荐
相关产品推荐

