FastAPI搭建Python后台管理系统文件概述(一)
文件概述是经由openAI生成的,非常详细
## 接下来请你逐文件分析下面的工程[1/102] 请对下面的程序文件做一个概述: fastapi-backend/app.py
**文件概述:app.py**
1. **导入模块**:
- `uvicorn`:用于运行 FastAPI 应用的 ASGI 服务器。
- `app` 和 `AppConfig`:从 `server` 模块导入,代表 FastAPI 应用实例和应用配置。
2. **主要功能**:
- 脚本的主要目的是启动 FastAPI 应用,使用 `uvicorn.run()` 方法。
- 通过从 `AppConfig` 获取主机、端口、根路径和是否重载的配置,来设置应用的运行参数。
3. **入口点**:
- 该脚本包含一个典型的 Python 入口点,当脚本作为主程序运行时,会启动 FastAPI 应用。
4. **配置选项**:
- `app_host`、`app_port`、`app_root_path` 和 `app_reload` 通过 `AppConfig` 提供,允许灵活配置应用的运行环境。
总之,该文件是启动 FastAPI 应用的入口,配置了用于运行服务器的基本参数。
## [2/102] 请对下面的程序文件做一个概述: fastapi-backend/server.py
### 概述文件:server.py
#### 1. 文件功能
`server.py` 文件是一个 FastAPI 应用的主要入口,负责初始化应用程序,设置生命周期事件,加载路由和中间件,并处理全局异常。
#### 2. 主要组件
- **FastAPI 应用对象**: 利用 `FastAPI` 类创建一个应用实例,并进行配置(如标题、描述、版本)。
- **生命周期管理**: 使用 `asynccontextmanager` 处理应用启动和关闭过程,包括初始化 Redis 和调度器。
- **路由加载**: 通过 `app.include_router` 方法加载多个接口(包括用户管理、角色管理等)到主应用中。
#### 3. 关键功能
- **日志记录**: 利用 `logger` 记录应用启动的关键事件。
- **Redis 和调度器初始化**: 在应用启动时创建 Redis 连接池和系统调度器。
- **异常处理**: 引入通用的异常处理方法,以提高系统稳定性。
#### 4. 路由控制器
路由被分为多个模块,每个模块提供特定的功能,包括但不限于:
- 登录模块
- 用户管理
- 角色管理
- 菜单管理
- 日志管理
- 缓存监控
#### 5. 子应用和中间件
- **子应用处理**: 通过 `handle_sub_applications` 函数将子应用挂载到主应用。
- **中间件处理**: 使用 `handle_middleware` 函数加载必要的中间件,增强应用的功能。
#### 6. 配置管理
应用使用 `AppConfig` 配置类加载基本的应用配置,如应用名和版本号。
### 总结
`server.py` 为 FastAPI 应用的核心文件,通过灵活的路由控制和高效的资源管理,为不同模块(如用户管理、系统监控等)提供了良好的接口和服务。
## [3/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/pwd_util.py
该文件 `pwd_util.py` 是一个用于处理密码安全的工具类,属于 FastAPI 后端项目中的实用模块。文件的主要功能和结构如下:
### 概述
1. **依赖导入**:
- 使用 `passlib` 库中的 `CryptContext` 来处理密码加密和验证。
2. **类定义**:
- `PwdUtil`: 该类封装了关于密码处理的静态方法。
3. **类方法**:
- `verify_password(plain_password, hashed_password)`: 校验输入的明文密码与存储的哈希密码是否匹配。返回布尔值表示校验结果。
- `get_password_hash(input_password)`: 将输入的明文密码加密为哈希密码,并返回加密后的结果。
### 功能总结
- 提供了密码验证与加密的功能,提高系统密码处理的安全性和便捷性。
## [4/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/time_format_util.py
### 概述:时间格式化工具
文件名:`time_format_util.py`
#### 文件功能
该文件包含三个主要函数,用于处理对象和字典列表中的`datetime`类型属性,将它们格式化为字符串形式。所有的日期时间格式均为`'%Y-%m-%d %H:%M:%S'`。
#### 主要功能函数
1. **`object_format_datetime(obj)`**
- **输入**:一个对象`obj`。
- **输出**:返回对象,所有`datetime`类型的属性已被格式化为字符串。
- **说明**:遍历对象的属性,逐一检查并格式化`datetime`属性。
2. **`list_format_datetime(lst)`**
- **输入**:一个对象列表`lst`。
- **输出**:返回该列表,所有对象的`datetime`属性已被格式化。
- **说明**:对列表中每个对象调用`object_format_datetime`函数,对其属性执行日期时间格式化。
3. **`format_datetime_dict_list(dicts)`**
- **输入**:一个嵌套字典的列表`dicts`。
- **输出**:返回新的嵌套字典列表,其中所有`datetime`值已被格式化为字符串。
- **说明**:递归遍历字典,处理子字典中的`datetime`属性,转换这些值的格式。
#### 总结
`time_format_util.py`旨在为FastAPI项目提供便捷的时间格式化功能,确保在处理对象和字典中的日期时间数据时,可以统一格式输出。这对数据传输和展示非常有用。
## [5/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/string_util.py
### 概述:`string_util.py`
该文件包含一个名为 `StringUtil` 的类,提供了一系列用于字符串操作的工具方法。以下是各个方法的功能概述:
1. **is_blank(string: str) -> bool**:
- 检查给定字符串是否为空字符串或只包含空格。
- 返回 `True` 如果字符串为 `None`、空字符串或只包含空格;否则返回 `False`。
2. **is_empty(string) -> bool**:
- 确定字符串是否为 `None` 或空字符串。
- 返回布尔值。
3. **is_http(link: str) -> bool**:
- 检查给定链接是否以 `http://` 或 `https://` 开头。
- 返回布尔值。
4. **contains_ignore_case(search_str: str, compare_str: str) -> bool**:
- 检查 `search_str` 是否包含 `compare_str`,并忽略大小写。
- 返回布尔值。
5. **contains_any_ignore_case(search_str: str, compare_str_list: List[str]) -> bool**:
- 检查 `search_str` 是否包含 `compare_str_list` 中的任意一个字符串,忽略大小写。
- 返回布尔值。
6. **startswith_case(search_str: str, compare_str: str) -> bool**:
- 检查 `search_str` 是否以 `compare_str` 开头。
- 返回布尔值。
7. **startswith_any_case(search_str: str, compare_str_list: List[str]) -> bool**:
- 检查 `search_str` 是否以 `compare_str_list` 中的任意一个字符串开头。
- 返回布尔值。
### 总结
`StringUtil` 类提供了多种实用的字符串检查方法,适用于各种字符串处理场景,尤其是在需要处理输入验证或比较时。
## [6/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/upload_util.py
### 概述:`upload_util.py`
文件 `upload_util.py` 是一个用于处理文件上传的工具类,名为 `UploadUtil`。该类提供了多种方法,以便在 FastAPI 应用程序中安全和有效地管理文件上传。
#### 主要功能:
1. **生成随机数字**:
- `generate_random_number`: 生成一个3位数组成的随机字符串(001-999)。
2. **检查文件**:
- `check_file_exists`: 检查给定路径的文件是否存在。
- `check_file_extension`: 验证上传文件的后缀是否合法,确保文件类型符合预设的允许扩展名。
- `check_file_timestamp`: 校验文件名中的时间戳是否合法,符合格式`%Y%m%d%H%M%S`。
- `check_file_machine`: 验证文件名中机器码部分的合法性。
- `check_file_random_code`: 检查文件名中随机码的合法性。
3. **文件操作**:
- `generate_file`: 根据文件路径生成二进制数据供其他操作使用。
- `delete_file`: 根据文件路径删除文件。
#### 依赖:
- 引入模块:
- `os`: 文件操作。
- `random`: 随机数生成。
- `datetime`: 日期时间处理。
- `fastapi.UploadFile`: 处理文件上传。
- `config.env.UploadConfig`: 配置文件,定义了上传的相关设置(例如允许的文件扩展名)。
### 总结:
`UploadUtil` 类为 FastAPI 应用提供了有效的工具,以便对上传文件的验证和处理,确保文件操作的安全性和规范性。
## [7/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/response_util.py
该文件名为 `response_util.py`,主要包含一个名为 `ResponseUtil` 的工具类,用于生成标准化的HTTP响应。以下是该类的主要功能概述:
1. **类概述**:
- `ResponseUtil` 提供了多个类方法,用于返回不同类型的HTTP响应,包括成功、失败、未认证、未授权、错误和流式响应。
2. **主要方法**:
- `success`: 返回成功响应,包含可自定义的消息和数据。
- `failure`: 返回失败响应,允许用户指定具体的失败信息和数据。
- `unauthorized`: 返回未认证响应,默认信息为“登录信息已过期,访问系统资源失败”。
- `forbidden`: 返回未授权响应,默认信息为“该用户无此接口权限”。
- `error`: 返回包含错误信息的响应,默认消息为“接口异常”。
- `streaming`: 用于流式返回数据的响应。
3. **参数说明**:
- 各个方法的参数包括 `msg`(消息)、`data`(数据)、`rows`(行数据)、`dict_content`(字典类型的自定义内容)和 `model_content`(基于Pydantic的模型内容),所有这些参数都是可选的。
4. **返回类型**:
- 每个方法返回统一的 `JSONResponse`,包含HTTP状态码和经过序列化的响应内容。
5. **时间戳**:
- 所有响应中都增加了一个时间戳字段,标识请求的处理时间。
此类通过集中管理和标准化不同类型的响应,方便开发者统一接口返回格式,提高代码整洁性与一致性。
## [8/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/common_util.py
### 概述文件:common_util.py
**文件位置**: `fastapi-backend/utils/common_util.py`
**功能**:
该模块包含多个工具类和函数,用于处理字符串格式转换、Excel文件操作和文件路径处理。
### 主要组件:
1. **worship()**:
- 打印一段装饰性的ASCII艺术文本。
2. **类 CamelCaseUtil**:
- 提供方法将下划线命名法(snake_case)转换为小驼峰命名法(camelCase)。
- `snake_to_camel(snake_str)`: 进行下划线到小驼峰的转换。
- `transform_result(result)`: 处理输入数据(字典、列表、SQLAlchemy的Row等)并应用转换。
3. **类 SnakeCaseUtil**:
- 提供方法将小驼峰命名法(camelCase)转换为下划线命名法(snake_case)。
- `camel_to_snake(camel_str)`: 进行小驼峰到下划线的转换。
- `transform_result(result)`: 处理输入数据并应用转换。
4. **bytes2human(n, format_str)**:
- 将字节大小转换为人类可读的格式(例如,从字节转换为KB、MB等)。
5. **bytes2file_response(bytes_info)**:
- 生成字节流响应,适用于文件下载。
6. **export_list2excel(list_data)**:
- 将列表数据导出为Excel文件的二进制数据。
7. **get_excel_template(header_list, selector_header_list, option_list)**:
- 创建带有选择器的Excel模板并返回其二进制数据。
8. **get_filepath_from_url(url)**:
- 根据给定的URL请求参数提取出文件路径。
### 总结:
该模块为FastAPI后端服务提供了一系列实用工具,主要用于数据格式转换以及Excel文件生成和处理。可用于增强数据交互和导出功能。
## [9/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/page_util.py
### 概述文件:`fastapi-backend/utils/page_util.py`
这个文件包含了分页处理的实用工具,以支持 FastAPI 后端的响应数据分页需求。主要定义了一个用于返回分页数据的 Pydantic 模型,以及一个包含分页相关方法的类。
#### 主要组件
1. **`PageResponseModel` 类**:
- 使用 Pydantic 定义的模型,处理分页查询的返回结构。
- 具有以下字段:
- `rows`: 分页后的数据列表。
- `page_num`: 当前页码。
- `page_size`: 每页数据量。
- `total`: 数据总量。
- `has_next`: 是否有下一页。
2. **`PageUtil` 类**:
- 包含两个主要方法,提供从数据列表或数据库查询中获取分页数据的功能。
- **`get_page_obj(data_list, page_num, page_size)`**:
- 输入原始数据列表、当前页码和页面大小。
- 计算起始和结束索引,并返回相应的分页数据对象。
- 计算是否有下一页(`has_next`)。
- **`paginate(db, query, page_num, page_size, is_page)`**:
- 输入数据库会话、SQLAlchemy 查询对象、当前页码、页面大小及是否启用分页标志。
- 如果启用分页,则计算总数并获取分页数据;否则,返回所有符合查询条件的数据。
- 处理数据库返回的数据并调用 `CamelCaseUtil.transform_result` 进行数据格式转换。
3. **全局函数**:
- `get_page_obj(data_list, page_num, page_size)`: 这是一个与 `PageUtil.get_page_obj` 方法相同的功能,用于处理列表数据的分页,便于直接使用。
#### 用途
该文件旨在简化数据分页的处理,提供统一的响应格式,便于 API 客户端使用,支持 FastAPI 框架下的数据交互。通过 Pydantic 模型,确保数据的有效性和易用性。
## [10/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/message_util.py
### 概述文件:`fastapi-backend/utils/message_util.py`
该文件定义了一个消息服务功能,主要用于处理短信验证码。具体实现如下:
- **导入日志工具**:从`utils.log_util`模块导入`logger`对象,用于记录日志。
- **函数功能**:`message_service(sms_code: str)`接收一个字符串参数`sms_code`,用作短信验证码。
- **日志记录**:函数内部使用`logger.info`方法记录短信验证码的信息,确保在执行时能够跟踪和记录相关数据。
### 总结
此文件的主要目的是通过日志记录功能,跟踪和验证短信验证码,适用于需要验证用户身份的场景。
## [11/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/cron_util.py
`cron_util.py` 是一个用于验证 Cron 表达式的工具类,名为 `CronUtil`。其主要功能和结构如下:
### 功能概述:
1. **类注释**:该类提供了用于处理和验证 Cron 表达式的相关方法。
2. **私有方法**:
- `__valid_range`: 验证给定字符串是否在指定范围内。
- `__valid_sum`: 验证给定字符串的两个部分是否满足特定的范围和总和条件。
3. **公有方法**:
- `validate_second_or_minute`: 验证秒或分钟字段的合法性。
- `validate_hour`: 验证小时字段的合法性。
- `validate_day`: 验证日期字段的合法性。
- `validate_month`: 验证月份字段的合法性。
- `validate_week`: 验证周字段的合法性。
- `validate_year`: 验证年份字段的合法性。
- `validate_cron_expression`: 验证整体 Cron 表达式的合法性,确保各字段符合标准。
### 输入和返回:
- 每个验证方法接受一个字符串参数,代表 Cron 表达式中对应的部分(秒、分钟、小时等)。
- 所有的验证方法返回布尔值,指示该部分是否有效。
- `validate_cron_expression` 方法接受完整的 Cron 表达式,并判断其是否合法,返回相应的布尔值。
### 使用场景:
该工具类适用于需要验证用户输入的 Cron 表达式的应用,确保调度任务和操作的准确性。
## [12/102] 请对下面的程序文件做一个概述: fastapi-backend/utils/log_util.py
### 概述:`log_util.py`
#### 文件路径:
`fastapi-backend/utils/log_util.py`
#### 文件功能:
该文件用于配置和管理日志记录,主要是设置错误日志的文件路径和日志记录的方式。
#### 主要特性:
1. **日志目录创建**:
- 使用 `os` 模块创建一个名为 `logs` 的目录,用于存储日志文件。如果该目录不存在,则自动创建。
2. **日志文件命名**:
- 错误日志文件的命名格式为当前日期(格式:`YYYY-MM-DD`)后面加上 `_error.log`,确保每日的错误日志分开存储。
3. **日志记录配置**:
- 使用 `loguru` 库,将错误日志记录到指定的日志文件中。
- 日志文件的大小限制为 50MB,并采用 UTF-8 编码进行保存。
- 旧的日志文件会通过压缩(zip)方式进行存档。
#### 总结:
`log_util.py` 文件提供了一个基础的日志处理机制,支持自动创建日志目录、命名和记录错误日志,确保应用的日志管理高效且有序。
## [13/102] 请对下面的程序文件做一个概述: fastapi-backend/sub_applications/staticfiles.py
### 概述:文件 `staticfiles.py`
#### 文件路径
`fastapi-backend/sub_applications/staticfiles.py`
#### 功能
该文件主要功能是为 FastAPI 应用程序挂载静态文件目录。
#### 主要组件
1. **模块导入**:
- `FastAPI` 和 `StaticFiles` 从 `fastapi` 中导入,提供了建立应用和处理静态文件的功能。
- `UploadConfig` 从 `config.env` 中导入,提供了静态文件路径和前缀的配置。
2. **函数**:
- `mount_staticfiles(app: FastAPI)`:
- 接收一个 FastAPI 实例 `app` 作为参数。
- 利用 `app.mount` 方法挂载静态文件,静态文件目录为 `UploadConfig.UPLOAD_PATH`,前缀为 `UploadConfig.UPLOAD_PREFIX`。
- 挂载的静态文件在应用的命名空间下被命名为 `'profile'`。
#### 总结
该文件通过 `mount_staticfiles` 函数为 FastAPI 应用挂载静态文件目录,允许服务器访问上传的文件,简化了静态资源的管理。
## [14/102] 请对下面的程序文件做一个概述: fastapi-backend/sub_applications/handle.py
### 概述
**文件名**: `handle.py`
**位置**: `fastapi-backend/sub_applications/`
**功能**:
该文件包含一个函数 `handle_sub_applications`,用于在 FastAPI 应用中进行全局处理,主要目的是挂载子应用相关的静态文件到主应用上。
**代码解析**:
- `FastAPI` 是 FastAPI 框架的主类,用于创建 ASGI 应用。
- `mount_staticfiles` 是从 `sub_applications.staticfiles` 模块导入的函数,专门用于处理静态文件的挂载。
- `handle_sub_applications` 函数接收一个 FastAPI 应用实例 `app` 作为参数,调用 `mount_staticfiles(app)` 来完成静态文件的挂载。
### 总结
该文件的核心作用是为 FastAPI 应用设置子应用的静态文件挂载,通过 `handle_sub_applications` 函数调用其他模块以实现所需功能。
## [15/102] 请对下面的程序文件做一个概述: fastapi-backend/exceptions/handle.py
### 概述:`fastapi-backend/exceptions/handle.py`
该文件实现了一个全局异常处理机制用于 FastAPI 应用。通过定义多个异常处理函数,处理特定的异常类型并提供相应的 JSON 响应,确保应用在遇到错误时能够优雅地处理并返回有意义的信息。
#### 核心功能:
1. **全局异常处理**:使用 `handle_exception` 函数为 FastAPI 应用注册自定义异常处理器。
2. **异常类型处理**:
- **认证异常** (`AuthException`): 返回未授权响应。
- **登录异常** (`LoginException`): 返回失败响应。
- **模型验证异常** (`ModelValidatorException`): 记录警告日志并返回失败响应。
- **字段验证异常** (`FieldValidationError`): 记录警告日志并返回失败响应。
- **权限异常** (`PermissionException`): 返回禁止访问响应。
- **服务异常** (`ServiceException`): 记录错误日志并返回错误响应。
- **服务警告** (`ServiceWarning`): 记录警告日志并返回失败响应。
- **HTTP异常** (`HTTPException`): 返回状态码及详情的 JSON 响应。
- **其他异常** (`Exception`): 记录堆栈信息并返回错误响应。
#### 辅助工具:
- 使用 `utils.log_util` 进行日志记录。
- 使用 `utils.response_util` 生成 JSON 响应。
该文件提升了应用的健壮性和可维护性,确保在运行时的错误能够被合理处理并反馈给用户。
## [16/102] 请对下面的程序文件做一个概述: fastapi-backend/exceptions/exception.py
该文件 `exception.py` 定义了一组自定义异常类,主要用于处理不同类型的错误和警告,适用于 FastAPI 后端应用程序。具体概述如下:
1. **LoginException**: 用于表示登录过程中发生的异常。
2. **AuthException**: 处理与身份验证令牌相关的异常。
3. **PermissionException**: 代表权限不足或与权限有关的错误。
4. **ServiceException**: 一般的服务异常,用于标识服务层的问题。
5. **ServiceWarning**: 针对服务运行时的警告,不同于异常,表示潜在的问题。
6. **ModelValidatorException**: 用于模型验证失败时的异常。
每个异常类都继承自 Python 的内置 `Exception` 类,并且都有可选的 `data` 和 `message` 属性,以提供额外的上下文信息。这些自定义异常有助于提升代码的可读性和维护性,从而更有效地处理不同错误情况。
## [17/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/annotation/pydantic_annotation.py
该文件`pydantic_annotation.py`主要包含两个装饰器函数,用于将Pydantic模型类转换为FastAPI中用于处理查询参数和表单参数的功能。这两个装饰器都是泛型的,可以应用于任何继承自`BaseModel`的Pydantic模型。
### 主要内容概述:
1. **导入模块**:
- `inspect`: 用于程序反射,获取参数签名。
- FastAPI的`Form`和`Query`: 用于处理表单和查询参数。
- `BaseModel`和`FieldInfo`来自Pydantic,用于模型定义和字段信息。
2. **装饰器`as_query`**:
- 将Pydantic模型用于接收URL查询参数。
- 通过遍历模型字段,构建新的参数列表,设置每个参数的别名、默认值及类型注解。
- 为每个字段创建一个带有`Query`的参数,如果字段是必需的,则使用`Query(...)`,否则使用`Query(default=...)`。
3. **装饰器`as_form`**:
- 将Pydantic模型用于接收表单参数。
- 与`as_query`类似,遍历模型字段,构建新的参数列表,每个字段使用`Form`来处理。
- 对于必需字段同样使用`Form(...)`,非必需字段使用`Form(default=...)`。
4. **返回值**:
- 两个装饰器均返回更新后的Pydantic模型,添加了相应的`as_query`或`as_form`异步函数,可以创建模型实例并接收相应的输入。
### 总结:
这个模块使得FastAPI能够轻松接收并处理来自查询字符串和表单请求的参数,并且以类型安全的方式将其映射到Pydantic模型中,从而简化了FastAPI应用的参数处理过程。
## [18/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/annotation/log_annotation.py
### 概述文件: `log_annotation.py`
#### 文件描述
该文件定义了一个用于日志记录的装饰器类 `Log`,以及一个用于简便调用的装饰器方法 `log_decorator`。它们主要用于记录 API 请求的相关信息,包括登录和操作日志,帮助开发者诊断和监控应用程序的行为。
#### 主要功能
1. **装饰器类 `Log`**:
- 初始化时接受日志标题、业务类型和日志类型(登录或操作)。
- 通过 `__call__` 方法使其可以直接作为装饰器使用。
- 在被装饰的函数调用之前和之后收集请求和响应的相关信息,包括请求时间、用户信息及请求参数。
- 记录请求耗时,并将日志信息异步保存到数据库中。
2. **`log_decorator` 函数**:
- 一个轻量级的装饰器,用于快速生成日志记录功能。
- 提供了一个过时警告,鼓励开发者使用 `Log` 装饰器。
3. **辅助功能**:
- `get_ip_location` 方法用于根据请求的 IP 地址查询地理位置,默认返回 "内网IP" 或 "未知"。
#### 日志记录内容
- 登录日志记录,包括用户 IP、地理位置、浏览器信息、操作时间等。
- 操作日志记录,包括请求的 URL、请求方法、操作参数、响应结果以及操作耗时。
#### 异常处理
- 当出现特定自定义异常(例如 `LoginException`, `ServiceException`)时,记录警告和错误信息,并通过自定义响应格式返回错误信息。
#### 使用场景
- 该模块适用于使用 FastAPI 的 web 应用,通过装饰器可以为 API 接口轻松添加日志记录功能,增强系统的可监控性和可维护性。
#### 依赖项
- 该文件依赖多个模块,包括 FastAPI 相关的请求和响应模块、日志和异常处理模块,以及用于请求参数和 IP 地址处理的工具。
通过这种方式,您可以在代码中快速记录和追踪用户活动,为程序提供审计和监控能力。
## [19/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/aspect/data_scope.py
### 概述文件:`data_scope.py`
#### 文件路径
`fastapi-backend/module_admin/aspect/data_scope.py`
#### 简介
该文件定义了一个名为 `GetDataScope` 的类,用于获取当前用户的数据访问权限对应的查询 SQL 语句。数据权限主要通过用户角色来控制,支持多种权限等级。
#### 主要组件
1. **类及其常量**
- `GetDataScope`: 主要类,用于构造与数据权限相关的 SQL 查询条件。
- 常量定义:
- `DATA_SCOPE_ALL`: 表示所有数据权限。
- `DATA_SCOPE_CUSTOM`: 表示自定义数据权限。
- `DATA_SCOPE_DEPT`: 表示部门数据权限。
- `DATA_SCOPE_DEPT_AND_CHILD`: 表示部门及其子部门的数据权限。
- `DATA_SCOPE_SELF`: 表示仅自己数据权限。
2. **初始化方法 (`__init__`)**
- 参数:
- `query_alias`: 查询表的 SQLAlchemy 模型名称。
- `db_alias`: ORM 对象的别名,默认为 `'db'`。
- `user_alias`: 用户ID字段的别名,默认为 `'user_id'`。
- `dept_alias`: 部门ID字段的别名,默认为 `'dept_id'`。
3. **调用方法 (`__call__`)**
- 方法接受当前用户信息 `current_user`(通过依赖注入获取)。
- 根据当前用户的角色和数据权限生成相应的 SQL 查询条件。
- 函数逻辑区分不同的数据权限等级,构造相应的 SQL 语句,使得数据查询符合权限控制。
- 最终返回一个聚合的 SQL 查询条件。
#### 使用场景
该类可以集成到 FastAPI 的依赖管理中,用于控制与用户相关的数据访问逻辑,确保用户只能访问其权限范围内的数据。
#### 注意事项
代码中使用了 SQLAlchemy 的函数和特性,确保在使用时环境中已安装并配置好 SQLAlchemy。此外,确保 `CurrentUserModel` 和 `LoginService` 的相关依赖在项目中正确实现。
## [20/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/aspect/interface_auth.py
该文件 `interface_auth.py` 是一个 FastAPI 应用中的用户权限验证模块,主要包含两个类:`CheckUserInterfaceAuth` 和 `CheckRoleInterfaceAuth`。
### 类概述
1. **CheckUserInterfaceAuth**
- **功能**: 用于校验当前用户是否具有特定的接口权限。
- **构造函数参数**:
- `perm`: 单个权限标识或权限标识列表。
- `is_strict`: 一个可选的布尔值,指示在校验权限列表时是否采用严格模式。
- **调用方法**:
- 通过依赖注入获取当前用户,并检查其权限。
- 若用户权限列表中包含特定权限或具有所有待校验的权限,返回 `True`,否则抛出 `PermissionException`。
2. **CheckRoleInterfaceAuth**
- **功能**: 用于根据角色校验当前用户是否具有特定的接口权限。
- **构造函数参数**:
- `role_key`: 单个角色标识或角色标识列表。
- `is_strict`: 一个可选的布尔值,指示在校验角色列表时是否采用严格模式。
- **调用方法**:
- 通过依赖注入获取当前用户,并检查其角色。
- 若用户的角色列表中包含特定角色或具有所有待校验的角色,返回 `True`,否则抛出 `PermissionException`。
### 使用场景
这两个类通常用于保护 API 接口,确保只有拥有相应权限或角色的用户才能访问特定的功能。它们通过 FastAPI 的依赖注入机制,便于在路由处理函数中应用。
## [21/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/user_do.py
该文件 `user_do.py` 是一个定义用户相关数据库模型的 Python 脚本,使用 SQLAlchemy 作为 ORM(对象关系映射)工具。以下是文件的主要概述:
1. **导入模块**:
- `datetime`:用于处理日期和时间。
- 从 `sqlalchemy` 导入所需的字段类型。
- 从 `config.database` 导入 `Base`,这是所有模型的基础类。
2. **模型类**:
- `SysUser`:用户信息表。
- 包含字段如 `user_id`, `dept_id`, `user_name`, `nick_name`, `email`, `password`, 等,描述用户的基本信息及状态。
- 各字段包括数据类型、约束及注释,便于理解其功能和限制。
- `SysUserRole`:用户与角色的关联表。
- 通过 `user_id` 和 `role_id` 映射用户与角色的关系。
- 这两个字段作为复合主键。
- `SysUserPost`:用户与岗位的关联表。
- 通过 `user_id` 和 `post_id` 映射用户与岗位的关系。
- 同样使用这两个字段作为复合主键。
3. **功能与用途**:
- 文件中的类用于定义用户及其角色和岗位的数据库结构,便于管理和查询用户数据。
- 适用于构建 FastAPI 后端应用,支持用户管理相关的业务逻辑。
整体来看,该文件是设计在线系统用户管理功能的基础数据模型。
## [22/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/post_do.py
文件 `post_do.py` 定义了一个名为 `SysPost` 的 SQLAlchemy 模型,用于表示岗位信息表,其主要内容包括:
- **类描述**: `SysPost` 用于存储岗位相关信息,包括岗位ID、编码、名称等。
- **表名**: 该类映射到数据库中的表 `sys_post`。
### 主要字段:
1. `post_id`: 岗位ID,整型,主键,自动递增。
2. `post_code`: 岗位编码,字符串,非空。
3. `post_name`: 岗位名称,字符串,非空。
4. `post_sort`: 显示顺序,整型,非空。
5. `status`: 状态(0为正常,1为停用),字符串,非空,默认为'0'。
6. `create_by`: 创建者,字符串,默认为空。
7. `create_time`: 创建时间,日期时间,默认为当前时间。
8. `update_by`: 更新者,字符串,默认为空。
9. `update_time`: 更新时间,日期时间,默认为当前时间。
10. `remark`: 备注,字符串,默认为空。
### 备注:
- 使用 `Column` 定义了各个字段的类型和属性。
- 引入了 `datetime` 用于处理时间信息。
- 基类从 `config.database` 导入,确保与数据库映射。
此模型适用于需求管理和权限控制等领域的岗位管理模块。
## [23/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/log_do.py
该文件 `log_do.py` 定义了两个数据库模型,分别用于系统访问记录和操作日志记录。以下是文件的概述:
### 1. SysLogininfor 类
- **作用**: 存储系统访问记录。
- **表名**: `sys_logininfor`
- **字段**:
- `info_id`: 访问ID,主键,自增。
- `user_name`: 用户账号。
- `ipaddr`: 登录IP地址。
- `login_location`: 登录地点。
- `browser`: 浏览器类型。
- `os`: 操作系统。
- `status`: 登录状态(0表示成功,1表示失败)。
- `msg`: 提示消息。
- `login_time`: 访问时间,默认为当前时间。
- **索引**:
- `idx_sys_logininfor_s`: 基于状态的索引。
- `idx_sys_logininfor_lt`: 基于访问时间的索引。
### 2. SysOperLog 类
- **作用**: 存储操作日志记录。
- **表名**: `sys_oper_log`
- **字段**:
- `oper_id`: 日志主键,主键,自增。
- `title`: 模块标题。
- `business_type`: 业务类型(0表示其它,1表示新增等)。
- `method`: 方法名称。
- `request_method`: 请求方式。
- `operator_type`: 操作类别(0表示其它,1表示后台用户等)。
- `oper_name`: 操作人员。
- `dept_name`: 部门名称。
- `oper_url`: 请求URL。
- `oper_ip`: 主机地址。
- `oper_location`: 操作地点。
- `oper_param`: 请求参数。
- `json_result`: 返回参数。
- `status`: 操作状态(0表示正常,1表示异常)。
- `error_msg`: 错误消息。
- `oper_time`: 操作时间,默认为当前时间。
- `cost_time`: 消耗时间。
- **索引**:
- `idx_sys_oper_log_bt`: 基于业务类型的索引。
- `idx_sys_oper_log_s`: 基于状态的索引。
- `idx_sys_oper_log_ot`: 基于操作时间的索引。
### 总结
该文件利用 SQLAlchemy 进行数据库模型的定义,主要用于记录和管理系统访问和操作日志信息。通过索引优化了数据查询性能。
## [24/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/role_do.py
### 概述文件: `role_do.py`
#### 文件位置
`fastapi-backend/module_admin/entity/do/role_do.py`
#### 文件功能
该文件定义了与角色管理相关的数据库模型,包括角色信息、角色与部门的关联以及角色与菜单的关联。使用SQLAlchemy作为ORM(对象关系映射)工具,便于与数据库交互。
#### 主要类
1. **SysRole**:
- 描述角色信息表的结构。
- 包含以下字段:
- `role_id`: 角色ID,主键,自动递增。
- `role_name`: 角色名称,非空。
- `role_key`: 角色权限字符串,非空。
- `role_sort`: 显示顺序,非空。
- `data_scope`: 数据范围说明。
- `menu_check_strictly`: 菜单树关联显示选项。
- `dept_check_strictly`: 部门树关联显示选项。
- `status`: 角色状态(正常或停用),非空。
- `del_flag`: 删除标志。
- `create_by`, `update_by`: 记录创建及更新者。
- `create_time`, `update_time`: 记录创建及更新时间。
- `remark`: 备注。
2. **SysRoleDept**:
- 描述角色与部门关联表的结构。
- 包含以下字段:
- `role_id`: 角色ID,主键,非空。
- `dept_id`: 部门ID,主键,非空。
3. **SysRoleMenu**:
- 描述角色与菜单关联表的结构。
- 包含以下字段:
- `role_id`: 角色ID,主键,非空。
- `menu_id`: 菜单ID,主键,非空。
#### 总结
该文件为FastAPI项目中的角色管理模块提供了数据模型,便于后续的CRUD(创建、读取、更新、删除)操作及角色相关的权限管理功能。
## [25/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/config_do.py
文件概述:
文件名:`config_do.py`
该文件定义了一个名为 `SysConfig` 的 SQLAlchemy 数据模型类,表示一个系统参数配置表。该表结构包括以下字段:
- `config_id`:参数主键,自增整型。
- `config_name`:参数名称,字符串类型,最大长度100。
- `config_key`:参数键名,字符串类型,最大长度100。
- `config_value`:参数键值,字符串类型,最大长度500。
- `config_type`:系统内置标识,字符串类型,长度为1;可以是'Y'(是)或'N'(否),默认为'N'。
- `create_by`:创建者,字符串类型,最大长度64。
- `create_time`:创建时间,日期时间类型,默认为当前时间。
- `update_by`:更新者,字符串类型,最大长度64。
- `update_time`:更新时间,日期时间类型,默认为当前时间。
- `remark`:备注,字符串类型,最大长度500。
每个字段还包含类型、可否为null、默认值以及字段注释的信息,以辅助理解其用途和约束。该模型继承自 `Base`,用于与数据库进行交互。
## [26/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/job_do.py
该文件 `job_do.py` 包含两个数据模型类,使用 SQLAlchemy ORM 定义了两个数据库表,分别是 `sys_job` 和 `sys_job_log`,用于记录定时任务的相关信息和日志。
### 概述
1. **SysJob 类**
- 表示定时任务调度表,其表名为 `sys_job`。
- 主要字段包括:
- `job_id`: 任务ID,主键,自增。
- `job_name`: 任务名称。
- `job_group`: 任务组名,默认值为 'default'。
- `job_executor`: 任务执行器,默认值为 'default'。
- `invoke_target`: 调用目标字符串。
- `job_args`: 位置参数。
- `job_kwargs`: 关键字参数。
- `cron_expression`: cron 表达式,用于定义任务的执行时间。
- `misfire_policy`: 计划执行错误策略。
- `concurrent`: 是否允许并发执行。
- `status`: 任务状态,0 为正常,1 为暂停。
- `create_by`, `update_by`: 创建和更新者。
- `create_time`, `update_time`: 记录的创建和更新时间。
- `remark`: 备注信息。
2. **SysJobLog 类**
- 表示定时任务调度日志表,其表名为 `sys_job_log`。
- 主要字段包括:
- `job_log_id`: 任务日志ID,主键,自增。
- `job_name`: 任务名称。
- `job_group`: 任务组名。
- `job_executor`: 任务执行器,默认值为 'default'。
- `invoke_target`: 调用目标字符串。
- `job_args`: 位置参数。
- `job_kwargs`: 关键字参数。
- `job_trigger`: 任务触发器,记录任务是如何被触发的。
- `job_message`: 日志信息,记录任务执行的相关信息。
- `status`: 执行状态,0 为正常,1 为失败。
- `exception_info`: 记录执行异常的详细信息。
- `create_time`: 日志记录的创建时间。
### 总结
该文件的主要功能是提供定时任务和其执行日志的数据库模型,以支持任务调度系统的功能。
## [27/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/dept_do.py
该文件 `dept_do.py` 是一个用于定义部门实体的 SQLAlchemy 模型,属于 `fastapi-backend` 项目的模块部分。主要功能和结构如下:
### 概述
- **模型名称**:`SysDept`,表示部门表(`sys_dept`)。
- **继承关系**:继承自 `Base`,这是 SQLAlchemy 的基础模型类。
### 属性
- `dept_id`: 主键,部门ID,自动递增。
- `parent_id`: 父部门ID,默认值为0。
- `ancestors`: 祖级列表,字符串类型,默认为空。
- `dept_name`: 部门名称,字符串类型,最大长度30,默认为空。
- `order_num`: 显示顺序,整数类型,默认为0。
- `leader`: 负责人,字符串类型,最大长度20,默认为空。
- `phone`: 联系电话,字符串类型,最大长度11,默认为空。
- `email`: 邮箱地址,字符串类型,最大长度50,默认为空。
- `status`: 部门状态,字符串类型,单字符,默认为'0'(正常)。
- `del_flag`: 删除标志,字符串类型,单字符,默认为'0'(存在)。
- `create_by`: 创建者,字符串类型,最大长度64,默认为空。
- `create_time`: 创建时间,日期时间类型,默认为当前时间。
- `update_by`: 更新者,字符串类型,最大长度64,默认为空。
- `update_time`: 更新时间,日期时间类型,默认为当前时间。
### 目的
该模型用于应用程序中管理部门信息,支持增、删、改、查等基本功能,是数据库交互的基础。各属性均注明了相关的功能和约束,确保数据的完整性和有效性。
## [28/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/notice_do.py
该文件 `notice_do.py` 是一个 Python 模块,用于定义数据库中 "通知公告" 表的结构。该模块使用 SQLAlchemy 作为 ORM(对象关系映射)工具,并继承自一个定义好的基类 `Base`,代表数据库表的基础结构。
### 概述
- **模块名称**: `notice_do.py`
- **功能**: 定义数据库表 `sys_notice` 的模型,包含公告的相关字段及属性。
### 数据库模型 - `SysNotice`
- **表名**: `sys_notice`
- **字段**:
- `notice_id`: 公告的唯一标识符,主键,自增。
- `notice_title`: 公告标题,字符串,最多50个字符,不能为空。
- `notice_type`: 公告类型,字符串(1为通知,2为公告),不能为空。
- `notice_content`: 公告内容,使用二进制大对象存储。
- `status`: 公告状态(0表示正常,1表示关闭),字符串,默认为0。
- `create_by`: 创建者,字符串,最长64个字符,默认值为空字符串。
- `create_time`: 创建时间,日期时间类型,默认值为当前时间。
- `update_by`: 更新者,字符串,最长64个字符,默认值为空字符串。
- `update_time`: 更新时间,日期时间类型,默认值为当前时间。
- `remark`: 备注,字符串,最长255个字符。
### 备注
该定义通过使用 SQLAlchemy 的模型类和列类型,提供了数据类型、约束和默认值等信息,以便在应用中进行数据的有效管理与操作。
## [29/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/dict_do.py
该文件 `dict_do.py` 定义了两个 SQLAlchemy 数据模型,用于处理字典类型和字典数据。
1. **SysDictType 类**:
- 代表字典类型表 (`sys_dict_type`)。
- 主要字段:
- `dict_id`: 字典主键,自动递增。
- `dict_name`: 字典名称。
- `dict_type`: 字典类型,唯一约束。
- `status`: 状态(0为正常,1为停用)。
- `create_by`, `update_by`: 记录创建者和更新者。
- `create_time`, `update_time`: 记录创建和更新时间。
- `remark`: 备注信息。
2. **SysDictData 类**:
- 代表字典数据表 (`sys_dict_data`)。
- 主要字段:
- `dict_code`: 字典编码,自动递增。
- `dict_sort`: 字典排序。
- `dict_label`: 字典标签。
- `dict_value`: 字典键值。
- `dict_type`: 关联的字典类型。
- `css_class`, `list_class`: 样式属性和表格样式。
- `is_default`: 是否为默认项。
- `status`: 状态(0为正常,1为停用)。
- `create_by`, `update_by`: 记录创建者和更新者。
- `create_time`, `update_time`: 记录创建和更新时间。
- `remark`: 备注信息。
两个模型都继承自 `Base`,并通过各自表名与数据库表相关联。这些类构建了字典系统的基础数据结构,以便在后端处理字典类型和数据。
## [30/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/entity/do/menu_do.py
文件 `menu_do.py` 是一个定义数据库模型的Python模块,属于一个使用FastAPI框架构建的后台系统。该文件使用SQLAlchemy库来映射数据库表与Python对象。
### 概述
- **目的**: 该模块用于定义菜单权限表(`sys_menu`),它管理系统中的菜单和权限信息。
### 主要内容
1. **导入模块**:
- 从`datetime`模块导入`datetime`。
- 从`sqlalchemy`导入必要的数据类型(如`Column`, `DateTime`, `Integer`, `String`)。
- 导入数据库基础类`Base`。
2. **模型类**:
- `SysMenu`类继承自`Base`,表示一个数据库模型。
3. **表名**:
- 数据库表名定义为`sys_menu`。
4. **字段定义**:
- `menu_id`: 主键,自动递增的整数,表示菜单ID。
- `menu_name`: 菜单名称,字符串,非空。
- `parent_id`: 整数,表示父菜单ID,默认值为0。
- `order_num`: 整数,表示显示顺序,默认值为0。
- `path`: 路由地址,字符串,默认为空。
- `component`: 组件路径,字符串,默认为空。
- `query`: 路由参数,字符串,默认为空。
- `route_name`: 路由名称,字符串,默认为空。
- `is_frame`: 整数,是否为外链(0是,1否),默认值为1。
- `is_cache`: 整数,是否缓存(0缓存,1不缓存),默认值为0。
- `menu_type`: 字符串,菜单类型(M目录、C菜单、F按钮),默认值为空。
- `visible`: 字符串,菜单状态(0显示,1隐藏),默认值为0。
- `status`: 字符串,菜单状态(0正常,1停用),默认值为0。
- `perms`: 字符串,权限标识,默认为空。
- `icon`: 字符串,菜单图标,默认为'#'。
- `create_by`: 字符串,创建者,默认为空。
- `create_time`: 创建时间,`DateTime`类型,默认为当前时间。
- `update_by`: 字符串,更新者,默认为空。
- `update_time`: 更新时间,`DateTime`类型,默认为当前时间。
- `remark`: 字符串,备注,默认为空。
### 总结
该模块提供了一个全面的菜单权限管理的数据模型,定义了菜单的各种属性,能够在FastAPI应用中进行有效的数据库操作和权限控制。
全部 0条评论