104 lines
2.9 KiB
Python
104 lines
2.9 KiB
Python
|
# _*_ coding : UTF-8 _*_
|
||
|
# @Time : 2025/01/17 21:18
|
||
|
# @UpdateTime : 2025/01/17 21:18
|
||
|
# @Author : sonder
|
||
|
# @File : app.py
|
||
|
# @Software : PyCharm
|
||
|
# @Comment : 本程序为项目启动文件
|
||
|
|
||
|
from contextlib import asynccontextmanager
|
||
|
|
||
|
import uvicorn
|
||
|
from fastapi import FastAPI
|
||
|
from fastapi.openapi.utils import get_openapi
|
||
|
|
||
|
from api.cache import cacheAPI
|
||
|
from api.config import configApi
|
||
|
from api.department import departmentAPI
|
||
|
from api.file import fileAPI
|
||
|
from api.i18n import i18nAPI
|
||
|
from api.log import logAPI
|
||
|
from api.login import loginAPI
|
||
|
from api.permission import permissionAPI
|
||
|
from api.role import roleAPI
|
||
|
from api.server import serverAPI
|
||
|
from api.user import userAPI
|
||
|
from config.database import init_db, close_db
|
||
|
from config.env import AppConfig
|
||
|
from config.get_redis import Redis
|
||
|
from exceptions.handle import handle_exception
|
||
|
from middlewares.handle import handle_middleware
|
||
|
from utils.log import logger
|
||
|
|
||
|
|
||
|
@asynccontextmanager
|
||
|
async def lifespan(app: FastAPI):
|
||
|
logger.info(f'{AppConfig.app_name}开始启动')
|
||
|
app.state.redis = await Redis.create_redis_pool()
|
||
|
logger.info(f'{AppConfig.app_name}启动成功')
|
||
|
await init_db()
|
||
|
await Redis.init_system_config(app)
|
||
|
yield
|
||
|
await close_db()
|
||
|
await Redis.close_redis_pool(app)
|
||
|
|
||
|
|
||
|
app = FastAPI(
|
||
|
title=AppConfig.app_name,
|
||
|
description=f'{AppConfig.app_name}接口文档',
|
||
|
version=AppConfig.app_version,
|
||
|
lifespan=lifespan,
|
||
|
)
|
||
|
# 加载中间件处理方法
|
||
|
handle_middleware(app)
|
||
|
# 加载全局异常处理方法
|
||
|
handle_exception(app)
|
||
|
|
||
|
|
||
|
def custom_openapi():
|
||
|
if app.openapi_schema:
|
||
|
return app.openapi_schema
|
||
|
openapi_schema = get_openapi(
|
||
|
title="My API",
|
||
|
version="1.0.0",
|
||
|
routes=app.routes,
|
||
|
)
|
||
|
# 修改 Swagger UI 配置
|
||
|
openapi_schema["components"]["securitySchemes"] = {
|
||
|
"Bearer": {
|
||
|
"type": "apiKey",
|
||
|
"name": "Authorization",
|
||
|
"in": "header"
|
||
|
}
|
||
|
}
|
||
|
app.openapi_schema = openapi_schema
|
||
|
return app.openapi_schema
|
||
|
|
||
|
|
||
|
api_list = [
|
||
|
{'api': loginAPI, 'tags': ['登录管理']},
|
||
|
{'api': userAPI, 'tags': ['用户管理']},
|
||
|
{'api': departmentAPI, 'tags': ['部门管理']},
|
||
|
{'api': roleAPI, 'tags': ['角色管理']},
|
||
|
{'api': permissionAPI, 'tags': ['权限管理']},
|
||
|
{'api': fileAPI, 'tags': ['文件管理']},
|
||
|
{'api': logAPI, 'tags': ['日志管理']},
|
||
|
{'api': cacheAPI, 'tags': ['缓存管理']},
|
||
|
{'api': serverAPI, 'tags': ['服务器管理']},
|
||
|
{'api': i18nAPI, 'tags': ['国际化管理']},
|
||
|
{'api': configApi, 'tags': ['配置管理']},
|
||
|
]
|
||
|
|
||
|
for api in api_list:
|
||
|
app.include_router(router=api.get("api"), tags=api.get("tags"))
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
uvicorn.run(
|
||
|
app='app:app',
|
||
|
host=AppConfig.app_host,
|
||
|
port=AppConfig.app_port,
|
||
|
root_path=AppConfig.app_root_path,
|
||
|
reload=AppConfig.app_reload,
|
||
|
log_config="uvicorn_config.json"
|
||
|
)
|