mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-23 13:13:09 +00:00
style: 统一代码格式和字符串引号使用
refactor: 优化代码结构和可读性 feat: 添加http_limit模块实现请求限制功能 fix: 修复异步任务中使用time.sleep的问题 chore: 更新依赖项并添加pytest测试框架 docs: 更新项目描述信息 perf: 优化Redis序列化方式使用JSON替代pickle test: 添加测试相关配置和依赖
This commit is contained in:
@@ -27,10 +27,14 @@ from .service import DictDataService, DictTypeService
|
||||
DictRouter = APIRouter(route_class=OperationLogRoute, prefix="/dict", tags=["字典管理"])
|
||||
|
||||
|
||||
@DictRouter.get("/type/detail/{id}", summary="获取字典类型详情", description="获取字典类型详情")
|
||||
@DictRouter.get(
|
||||
"/type/detail/{id}",
|
||||
summary="获取字典类型详情",
|
||||
description="获取字典类型详情",
|
||||
)
|
||||
async def get_type_detail_controller(
|
||||
id: Annotated[int, Path(description="字典类型ID", ge=1)],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:detail"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:detail"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
获取字典类型详情
|
||||
@@ -54,7 +58,7 @@ async def get_type_detail_controller(
|
||||
async def get_type_list_controller(
|
||||
page: Annotated[PaginationQueryParam, Depends()],
|
||||
search: Annotated[DictTypeQueryParam, Depends()],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:query"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:query"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
查询字典类型
|
||||
@@ -70,15 +74,25 @@ async def get_type_list_controller(
|
||||
异常:
|
||||
- CustomException: 查询字典类型失败时抛出异常。
|
||||
"""
|
||||
result_dict_list = await DictTypeService.get_obj_list_service(auth=auth, search=search, order_by=page.order_by)
|
||||
result_dict = await PaginationService.paginate(data_list=result_dict_list, page_no=page.page_no, page_size=page.page_size)
|
||||
result_dict_list = await DictTypeService.get_obj_list_service(
|
||||
auth=auth, search=search, order_by=page.order_by
|
||||
)
|
||||
result_dict = await PaginationService.paginate(
|
||||
data_list=result_dict_list,
|
||||
page_no=page.page_no,
|
||||
page_size=page.page_size,
|
||||
)
|
||||
log.info("查询字典类型列表成功")
|
||||
return SuccessResponse(data=result_dict, msg="查询字典类型列表成功")
|
||||
|
||||
|
||||
@DictRouter.get("/type/optionselect", summary="获取全部字典类型", description="获取全部字典类型")
|
||||
@DictRouter.get(
|
||||
"/type/optionselect",
|
||||
summary="获取全部字典类型",
|
||||
description="获取全部字典类型",
|
||||
)
|
||||
async def get_type_loptionselect_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:query"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:query"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
获取全部字典类型
|
||||
@@ -101,7 +115,7 @@ async def get_type_loptionselect_controller(
|
||||
async def create_type_controller(
|
||||
data: DictTypeCreateSchema,
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:create"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:create"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
创建字典类型
|
||||
@@ -127,7 +141,7 @@ async def update_type_controller(
|
||||
data: DictTypeUpdateSchema,
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
id: Annotated[int, Path(description="字典类型ID", ge=1)],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:update"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:update"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
修改字典类型
|
||||
@@ -153,7 +167,7 @@ async def update_type_controller(
|
||||
async def delete_type_controller(
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
ids: Annotated[list[int], Body(description="ID列表")],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:delete"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:delete"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
删除字典类型
|
||||
@@ -174,10 +188,14 @@ async def delete_type_controller(
|
||||
return SuccessResponse(msg="删除字典类型成功")
|
||||
|
||||
|
||||
@DictRouter.patch("/type/available/setting", summary="批量修改字典类型状态", description="批量修改字典类型状态")
|
||||
@DictRouter.patch(
|
||||
"/type/available/setting",
|
||||
summary="批量修改字典类型状态",
|
||||
description="批量修改字典类型状态",
|
||||
)
|
||||
async def batch_set_available_dict_type_controller(
|
||||
data: BatchSetAvailable,
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:patch"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:patch"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
批量修改字典类型状态
|
||||
@@ -197,10 +215,10 @@ async def batch_set_available_dict_type_controller(
|
||||
return SuccessResponse(msg="批量修改字典类型状态成功")
|
||||
|
||||
|
||||
@DictRouter.post('/type/export', summary="导出字典类型", description="导出字典类型")
|
||||
@DictRouter.post("/type/export", summary="导出字典类型", description="导出字典类型")
|
||||
async def export_type_list_controller(
|
||||
search: Annotated[DictTypeQueryParam, Depends()],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:export"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_type:export"]))],
|
||||
) -> StreamingResponse:
|
||||
"""
|
||||
导出字典类型
|
||||
@@ -218,21 +236,23 @@ async def export_type_list_controller(
|
||||
# 获取全量数据
|
||||
result_dict_list = await DictTypeService.get_obj_list_service(search=search, auth=auth)
|
||||
export_result = await DictTypeService.export_obj_service(data_list=result_dict_list)
|
||||
log.info('导出字典类型成功')
|
||||
log.info("导出字典类型成功")
|
||||
|
||||
return StreamResponse(
|
||||
data=bytes2file_response(export_result),
|
||||
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
headers={
|
||||
'Content-Disposition': 'attachment; filename=dict_type.xlsx'
|
||||
}
|
||||
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
headers={"Content-Disposition": "attachment; filename=dict_type.xlsx"},
|
||||
)
|
||||
|
||||
|
||||
@DictRouter.get("/data/detail/{id}", summary="获取字典数据详情", description="获取字典数据详情")
|
||||
@DictRouter.get(
|
||||
"/data/detail/{id}",
|
||||
summary="获取字典数据详情",
|
||||
description="获取字典数据详情",
|
||||
)
|
||||
async def get_data_detail_controller(
|
||||
id: Annotated[int, Path(description="字典数据ID", ge=1)],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:detail"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:detail"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
获取字典数据详情
|
||||
@@ -256,7 +276,7 @@ async def get_data_detail_controller(
|
||||
async def get_data_list_controller(
|
||||
page: Annotated[PaginationQueryParam, Depends()],
|
||||
search: Annotated[DictDataQueryParam, Depends()],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:query"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:query"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
查询字典数据
|
||||
@@ -275,8 +295,14 @@ async def get_data_list_controller(
|
||||
order_by = [{"order": "asc"}]
|
||||
if page.order_by:
|
||||
order_by = page.order_by
|
||||
result_dict_list = await DictDataService.get_obj_list_service(auth=auth, search=search, order_by=order_by)
|
||||
result_dict = await PaginationService.paginate(data_list=result_dict_list, page_no=page.page_no, page_size=page.page_size)
|
||||
result_dict_list = await DictDataService.get_obj_list_service(
|
||||
auth=auth, search=search, order_by=order_by
|
||||
)
|
||||
result_dict = await PaginationService.paginate(
|
||||
data_list=result_dict_list,
|
||||
page_no=page.page_no,
|
||||
page_size=page.page_size,
|
||||
)
|
||||
log.info("查询字典数据列表成功")
|
||||
return SuccessResponse(data=result_dict, msg="查询字典数据列表成功")
|
||||
|
||||
@@ -285,7 +311,7 @@ async def get_data_list_controller(
|
||||
async def create_data_controller(
|
||||
data: DictDataCreateSchema,
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:create"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:create"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
创建字典数据
|
||||
@@ -311,7 +337,7 @@ async def update_data_controller(
|
||||
data: DictDataUpdateSchema,
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
id: Annotated[int, Path(description="字典数据ID")],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:update"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:update"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
修改字典数据
|
||||
@@ -337,7 +363,7 @@ async def update_data_controller(
|
||||
async def delete_data_controller(
|
||||
redis: Annotated[Redis, Depends(redis_getter)],
|
||||
ids: Annotated[list[int], Body(description="ID列表")],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:delete"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:delete"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
删除字典数据
|
||||
@@ -358,10 +384,14 @@ async def delete_data_controller(
|
||||
return SuccessResponse(msg="删除字典数据成功")
|
||||
|
||||
|
||||
@DictRouter.patch("/data/available/setting", summary="批量修改字典数据状态", description="批量修改字典数据状态")
|
||||
@DictRouter.patch(
|
||||
"/data/available/setting",
|
||||
summary="批量修改字典数据状态",
|
||||
description="批量修改字典数据状态",
|
||||
)
|
||||
async def batch_set_available_dict_data_controller(
|
||||
data: BatchSetAvailable,
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:patch"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:patch"]))],
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
批量修改字典数据状态
|
||||
@@ -381,11 +411,11 @@ async def batch_set_available_dict_data_controller(
|
||||
return SuccessResponse(msg="批量修改字典数据状态成功")
|
||||
|
||||
|
||||
@DictRouter.post('/data/export', summary="导出字典数据", description="导出字典数据")
|
||||
@DictRouter.post("/data/export", summary="导出字典数据", description="导出字典数据")
|
||||
async def export_data_list_controller(
|
||||
search: Annotated[DictDataQueryParam, Depends()],
|
||||
page: Annotated[PaginationQueryParam, Depends()],
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:export"]))]
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dict_data:export"]))],
|
||||
) -> StreamingResponse:
|
||||
"""
|
||||
导出字典数据
|
||||
@@ -401,23 +431,26 @@ async def export_data_list_controller(
|
||||
异常:
|
||||
- CustomException: 导出字典数据失败时抛出异常。
|
||||
"""
|
||||
result_dict_list = await DictDataService.get_obj_list_service(auth=auth, search=search, order_by=page.order_by)
|
||||
result_dict_list = await DictDataService.get_obj_list_service(
|
||||
auth=auth, search=search, order_by=page.order_by
|
||||
)
|
||||
export_result = await DictDataService.export_obj_service(data_list=result_dict_list)
|
||||
log.info('导出字典数据成功')
|
||||
log.info("导出字典数据成功")
|
||||
|
||||
return StreamResponse(
|
||||
data=bytes2file_response(export_result),
|
||||
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
headers={
|
||||
'Content-Disposition': 'attachment; filename=dice_data.xlsx'
|
||||
}
|
||||
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
headers={"Content-Disposition": "attachment; filename=dice_data.xlsx"},
|
||||
)
|
||||
|
||||
|
||||
@DictRouter.get('/data/info/{dict_type}', summary="根据字典类型获取数据", description="根据字典类型获取数据")
|
||||
@DictRouter.get(
|
||||
"/data/info/{dict_type}",
|
||||
summary="根据字典类型获取数据",
|
||||
description="根据字典类型获取数据",
|
||||
)
|
||||
async def get_init_dict_data_controller(
|
||||
dict_type: str,
|
||||
redis: Annotated[Redis, Depends(redis_getter)]
|
||||
dict_type: str, redis: Annotated[Redis, Depends(redis_getter)]
|
||||
) -> JSONResponse:
|
||||
"""
|
||||
根据字典类型获取数据
|
||||
|
||||
Reference in New Issue
Block a user