110 lines
3.1 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 api.code import codeAPI
from config.database import init_db, close_db
from config.env import AppConfig
from config.get_ElasticSearch import ElasticSearch
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)
logger.info(f'系统配置初始化成功')
app.state.es = await ElasticSearch.init_elasticsearch()
yield
await close_db()
await Redis.close_redis_pool(app)
await app.state.es.close()
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': ['配置管理']},
{'api': codeAPI, '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"
)