fastapi python项目构建 路由设置

FastAPI 是一个现代、快速(高性能)的 Python Web 框架,专门用于构建 API。它结合了 Python 类型提示的强大功能和异步编程的支持。

核心特性

1. 高性能

  • 基于 Starlette(Web 框架)和 Pydantic(数据验证)

  • 性能可与 NodeJS 和 Go 相媲美

  • 支持异步/等待语法

2. 类型安全

  • 使用 Python 类型提示

  • 在开发时提供更好的编辑器支持

3. 路由

  • 支持根据业务含义来接口分配到不同的文件当中

  • 清晰的业务逻辑

总启动文件:

import argparse
import asyncio
import logging
import os
import signal
import sys

import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from src.config.log_config import setup_logging
from src.settings import settings

setup_logging()

logger = logging.getLogger(__name__)if os.name == "nt":
    logger.info("Setting Windows event loop policy for asyncio")
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

app = FastAPI(
    title="EnerFlow API",
    description="API for Ener",
    version="0.1.0",
)
# 添加跨域 和 访问限制
app.add_middleware(
    CORSMiddleware,
    allow_credentials=True,
    allow_methods=["GET", "POST", "OPTIONS"],  # Use the configured list of methods
    allow_headers=["*"],  # Now allow all headers, but can be restricted further
)

# 载入路由
from src.server.yourapi import router as based_router app.include_router(based_router)
# 载入路由
if settings.product_tier == "p2": from src.vanced_agents.api import router as vanced_router app.include_router(vanced_router)

if __name__ == "__main__": # Parse 用于解析命令行参数 parser = argparse.ArgumentParser(description="Run the EnerFlow API server") parser.add_argument( "--reload", action="store_true", help="Enable auto-reload (default: True except on Windows)", ) parser.add_argument( "--host", type=str, default="localhost", help="Host to bind the server to (default: localhost)", ) parser.add_argument( "--port", type=int, default=settings.server_port, help="Port to bind the server to (default: 8000)", ) parser.add_argument( "--log-level", type=str, default="info", choices=["debug", "info", "warning", "error", "critical"], help="Log level (default: info)", ) args = parser.parse_args() # Determine reload setting reload = False if args.reload: reload = True try: logger.info(f"Starting EnerFlow API server on {args.host}:{args.port}") uvicorn.run( "server:app", host=args.host, port=args.port, reload=reload, log_level=args.log_level, ) except Exception as e: logger.error(f"Failed to start server: {str(e)}") sys.exit(1)

业务文件1:

# routes/users.py
from fastapi import APIRouter

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/")
def get_users(): ...

@router.post("/")
def create_user(): ...

业务文件2:

# routes/products.py
from fastapi import APIRouter

router = APIRouter(prefix="/products", tags=["products"])

@router.get("/")
def get_products(): ...

@router.post("/")
def create_product(): ...

 

posted @ 2025-11-28 13:58  wangssd  阅读(8)  评论(0)    收藏  举报