Files
ai_web/backend/config/api.py
2026-01-29 13:18:59 +08:00

78 lines
2.7 KiB
Python

"""
Django Ninja API configuration.
"""
import logging
from django.conf import settings
from ninja import NinjaAPI
from ninja.errors import HttpError, ValidationError
from ninja_jwt.authentication import JWTAuth
# Import routers from apps
from apps.users.api import router as auth_router
from apps.users.friends import router as friends_router
from apps.products.api import router as products_router, category_router, website_router
from apps.bounties.api import router as bounties_router
from apps.bounties.payments import router as payments_router
from apps.favorites.api import router as favorites_router
from apps.notifications.api import router as notifications_router
from apps.admin.api import router as admin_router
from config.search import router as search_router
from apps.common.errors import build_error_payload
# Create main API instance
api = NinjaAPI(
title="AI Web API",
version="1.0.0",
description="Backend API for AI Web application",
)
@api.exception_handler(HttpError)
def on_http_error(request, exc: HttpError):
return api.create_response(
request,
build_error_payload(status_code=exc.status_code, message=str(exc)),
status=exc.status_code,
)
@api.exception_handler(ValidationError)
def on_validation_error(request, exc: ValidationError):
details = getattr(exc, "errors", None)
return api.create_response(
request,
build_error_payload(
status_code=400,
message="请求参数校验失败",
details=details,
code="validation_error",
),
status=400,
)
@api.exception_handler(Exception)
def on_unhandled_error(request, exc: Exception):
logging.exception("Unhandled API error", exc_info=exc)
message = "服务器内部错误"
if getattr(settings, "DEBUG", False):
message = f"服务器内部错误: {exc}"
return api.create_response(
request,
build_error_payload(status_code=500, message=message),
status=500,
)
# Register routers
api.add_router("/auth/", auth_router, tags=["认证"])
api.add_router("/friends/", friends_router, tags=["好友"])
api.add_router("/categories/", category_router, tags=["分类"])
api.add_router("/websites/", website_router, tags=["网站"])
api.add_router("/products/", products_router, tags=["商品"])
api.add_router("/bounties/", bounties_router, tags=["悬赏"])
api.add_router("/payments/", payments_router, tags=["支付"])
api.add_router("/favorites/", favorites_router, tags=["收藏"])
api.add_router("/notifications/", notifications_router, tags=["通知"])
api.add_router("/search/", search_router, tags=["搜索"])
api.add_router("/admin/", admin_router, tags=["后台"])