安装了截至24年5月28日最新的FastAPI和Uvicorn库。在main.py中注册了所有路由,一律用app.include_router的方式。使用uvicorn启动后,点击中控的链接0.0.0.0:8000,浏览器弹窗显示{“detail”:”not found“},无论怎么修改域名后缀效果都一样。如果把路由直接放到main.py内,就可以正常访问。
为什么main.py中会发生路由注册失败?求大神指点
uvicorn app.main:app", host="0.0.0.0", port=8000, reload=True
#项目结构为:
project
|_main.py
|_routers\
| |_ __init__.py
| |_ page_router.py
| |_user_router.py
|_config\
|_templates\
|_static
我在main.py中注册了page_routers.py中的路由
from project.app.routers import page_router, user_router
app.include_router(page_router.router)
app.include_router(user_router.router)
#page_router.py里看上去是这样:
from fastapi import APIRouter
router = APIRouter()
@router.get("/")
async def root():
return {"message": "Hello World"}
启动方式
直接run或者在终端用指令运行
if __name__ == "main":
import uvicorn
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
经反复检查,发现下方代码影响了路由的正常导入,有谁能解释清楚原因我就直接采纳。
@asynccontextmanager
# async def lifespan(app: FastAPI):
# # Startup code here
# print("Application startup")
# try:
# # 创建 Redis 连接
# redis_client = redis.StrictRedis(
# host=settings.REDIS_HOST,
# port=settings.REDIS_PORT,
# decode_responses=True
# )
# # 测试连接是否正常
# if redis_client.ping():
# print("Redis 连接成功")
#
# # 测试 MySQL 连接
# conn, cursor = get_db_connection()
# cursor.execute("SELECT 1")
# cursor.close()
# conn.close()
# print("MySQL 连接成功")
#
# except redis.exceptions.ConnectionError as e:
# print(f"Redis 连接异常: {e}")
# except Exception as e:
# print(f"MySQL 连接异常: {e}")
# yield
# # Shutdown code here
# print("Application shutdown")
# if hasattr(settings, 'redis_client'):
# settings.redis_client.close()
# print("Redis 连接关闭")
#
# # 关闭 MySQL 连接池
# pool.close()
# print("MySQL 连接池关闭")
#
# app = FastAPI(lifespan=lifespan)
#
# # 启动应用时,启动Socket.IO后台任务
# @app.on_event("startup")
# async def startup_event():
# from project.app.routers.socket_router import handle_startup
# print("FastAPI startup event triggered")
# sio.start_background_task(handle_startup)