FastAPI搭建Python后台管理系统文件概述(四)
## [90/102] 请对下面的程序文件做一个概述: fastapi-backend/module_admin/dao/login_dao.py
### 概述文件:login_dao.py
**文件路径**: `fastapi-backend/module_admin/dao/login_dao.py`
**功能**:
此文件主要负责通过用户名从数据库中检索用户信息,使用的是异步数据库操作和SQLAlchemy ORM。
**主要组成部分**:
1. **导入模块**:
- 从 SQLAlchemy 导入 `and_` 和 `select`,用于构建查询条件。
- 从 `module_admin.entity.do.dept_do` 和 `module_admin.entity.do.user_do` 导入 `SysDept` 和 `SysUser`,这两个类分别代表部门和用户的数据库模型。
2. **异步函数**:
- `login_by_account`: 接受异步数据库会话对象和用户名作为参数,查询对应的用户信息。
- **参数**:
- `db`: 类型为 `AsyncSession`,用于执行数据库操作。
- `user_name`: 字符串类型,表示需要查询的用户名。
- **返回值**: 返回找到的用户对象(与部门信息关联),或返回 `None`(如果未找到)。
3. **查询逻辑**:
- 使用 `select` 语句查询 `SysUser` 和 `SysDept`,并根据用户名和删除标志条件筛选出有效的用户和对应的部门。
- 使用 `join` 方法联接部门信息,并确保只检索有效的部门记录(根据状态和删除标志)。
- 使用 `distinct()` 方法保证查询结果的唯一性。
- 使用 `await` 执行异步查询,获取结果后通过 `.first()` 方法提取第一个匹配的记录。
**总结**:
`login_dao.py` 文件实现了一个用户登录查询的功能,通过非阻塞方式从数据库中获取用户和部门信息,确保查询的有效性,并提供了足够的文档注释以供理解和使用。
## [91/102] 请对下面的程序文件做一个概述: fastapi-backend/module_task/__init__.py
文件 `__init__.py` 的主要功能是将 `scheduler_test` 模块导入到当前包中。注释 `# noqa: F401` 是用于告诉代码检查工具,这个导入虽然没有直接使用,但仍然是有效的,防止产生未使用导入的警告。
总的来说,这个文件主要用于包的初始化,确保 `scheduler_test` 模块可以在包中被访问。
## [92/102] 请对下面的程序文件做一个概述: fastapi-backend/module_task/scheduler_test.py
### 概述:scheduler_test.py
**文件路径**: `fastapi-backend/module_task/scheduler_test.py`
**功能**:
该文件定义了一个调度任务函数 `job`,用于执行某种定时或调度任务。
**代码详解**:
- **导入模块**:
```python
from datetime import datetime
```
引入 `datetime` 模块,以便获取当前时间。
- **函数定义**:
```python
def job(*args, **kwargs):
```
定义了一个名为 `job` 的函数,接受任意数量的位置参数 (`*args`) 和关键字参数 (`**kwargs`)。
- **打印参数**:
```python
print(args)
print(kwargs)
```
函数内部打印出传入的位置参数和关键字参数,便于调试和查看传入的数据。
- **打印当前时间**:
```python
print(f'{datetime.now()}执行了')
```
打印当前时间,并声明任务已执行。
**总结**:
`scheduler_test.py` 文件提供了一个简单的任务执行函数,能够接受动态参数并记录执行时间。这可以用于调度任务或测试目的。
## [93/102] 请对下面的程序文件做一个概述: fastapi-backend/config/constant.py
### 概述文件:`constant.py`
#### 文件简介
该文件定义了一组常量类,主要用于配置、返回状态码、定时任务和菜单等在 FastAPI 后端应用中常用的固定值。
#### 类及其功能
1. **CommonConstant**
- 包含一组基础常量,用于标识常用的协议、状态和验证标识。
- 主要常量:
- `WWW`, `HTTP`, `HTTPS`: 表示常用的网络协议前缀。
- `LOOKUP_*`: 表示不同的远程方法调用协议。
- `YES`, `NO`: 表示布尔状态。
- `DEPT_NORMAL`, `DEPT_DISABLE`: 表示部门的状态。
- `UNIQUE`, `NOT_UNIQUE`: 表示唯一性检查的标识。
2. **HttpStatusConstant**
- 定义了一组HTTP响应状态码,以便在应用中统一使用。
- 主要状态码:
- `SUCCESS (200)`, `CREATED (201)`, `ACCEPTED (202)`: 表示成功操作。
- `BAD_REQUEST (400)`, `UNAUTHORIZED (401)`, `FORBIDDEN (403)`: 表示请求错误或权限问题。
- `NOT_FOUND (404)`, `ERROR (500)`: 表示资源未找到或服务器内部错误。
3. **JobConstant**
- 主要用于定时任务的管理,定义了可调用和禁止调用的模块列表。
- 常量:
- `JOB_ERROR_LIST`: 一系列字符串,表示禁止调用的模块或关键词。
- `JOB_WHITE_LIST`: 允许调用的模块列表(如`module_task`)。
4. **MenuConstant**
- 定义菜单相关常量,用于前端菜单的管理。
- 常量:
- `TYPE_DIR`, `TYPE_MENU`, `TYPE_BUTTON`: 表示菜单的不同类型。
- `YES_FRAME`, `NO_FRAME`: 表示菜单是否为外链的标识。
- `LAYOUT`, `PARENT_VIEW`, `INNER_LINK`: 用于前端组件的标识。
### 总结
`constant.py` 文件通过定义常量,提供了一个中心化的配置方式,简化了代码的维护和阅读,确保了在整个应用中对特定值的一致使用。
## [94/102] 请对下面的程序文件做一个概述: fastapi-backend/config/enums.py
该文件 `enums.py` 定义了两个枚举类,分别用于表示业务操作类型和系统内置的 Redis 键名配置。
### 概述
1. **BusinessType Enum**:
- 该枚举类定义了多种业务操作类型及其对应的整数值:
- `OTHER`: 其他操作
- `INSERT`: 新增
- `UPDATE`: 修改
- `DELETE`: 删除
- `GRANT`: 授权
- `EXPORT`: 导出
- `IMPORT`: 导入
- `FORCE`: 强退
- `GENCODE`: 生成代码
- `CLEAN`: 清空数据
2. **RedisInitKeyConfig Enum**:
- 该枚举类定义了多个系统内置的 Redis 键名及其注释:
- `ACCESS_TOKEN`: 登录令牌
- `SYS_DICT`: 数据字典
- `SYS_CONFIG`: 配置信息
- `CAPTCHA_CODES`: 图片验证码
- `ACCOUNT_LOCK`: 用户锁定
- `PASSWORD_ERROR_COUNT`: 密码错误次数
- `SMS_CODE`: 短信验证码
- 每个枚举成员是一个字典,包含 `key` 和 `remark` 属性,用于获取键名和其描述信息。
### 总结
该文件用于集中管理系统内的业务操作类型和 Redis 键名,使得代码更具可读性和易维护性。
## [95/102] 请对下面的程序文件做一个概述: fastapi-backend/config/database.py
该文件 `database.py` 是一个用于配置和创建异步数据库连接的模块,主要与 SQLAlchemy ORM 和 MySQL 数据库交互。以下是文件的主要组成部分及其功能概述:
1. **导入模块**:
- 引入了 `create_async_engine` 和 `async_sessionmaker` 来支持异步数据库操作。
- 使用 `DeclarativeBase` 为模型定义基础类。
2. **数据库连接字符串**:
- 使用 `DataBaseConfig` 配置文件中的数据库连接信息(用户名、密码、主机、端口和数据库名)来创建一个异步的 SQLAlchemy 数据库 URL。
- `quote_plus` 函数用于处理数据库密码中的特殊字符。
3. **创建异步引擎**:
- `create_async_engine` 函数根据连接字符串和配置参数(如是否回显 SQL 语句、连接池大小等)创建异步数据库引擎。
4. **会话本地化**:
- `async_sessionmaker` 用于创建异步会话类 `AsyncSessionLocal`,该类用于管理与数据库的会话。
5. **基类定义**:
- 定义了一个名为 `Base` 的类,继承自 `AsyncAttrs` 和 `DeclarativeBase`,用于后续的 ORM 模型定义。
总体而言,该模块为 FastAPI 后端设置了异步数据库连接,便于后续数据操作和模型创建。
## [96/102] 请对下面的程序文件做一个概述: fastapi-backend/config/get_db.py
文件 `get_db.py` 是一个用于处理数据库连接的模块,属于 FastAPI 后端项目。该文件主要包含两个异步函数:
1. **get_db()**:
- 功能:为每个请求提供一个新的数据库连接。
- 描述:使用 `AsyncSessionLocal` 创建一个上下文管理器,当请求处理完毕后,该连接会自动关闭。通过 `yield` 关键字返回当前的数据库会话。
2. **init_create_table()**:
- 功能:在应用启动时初始化数据库连接并创建数据表。
- 描述:使用 `async_engine` 开启一个连接,执行 `Base.metadata.create_all` 方法,以创建所有定义的数据库表,并通过日志记录初始化过程的状态。
整体来说,文件负责数据库连接的管理和表的初始化,为 FastAPI 应用提供了基础的数据库操作支持。
## [97/102] 请对下面的程序文件做一个概述: fastapi-backend/config/env.py
### 概述:`fastapi-backend/config/env.py`
该文件用于配置FastAPI应用的多种设置,包括应用环境、JWT认证、数据库连接、Redis缓存、文件上传以及缓存目录管理。
#### 主要组件:
1. **应用配置 `AppSettings`**:
- 定义基本的应用运行环境和属性,如环境(dev)、名称、根路径、主机、端口、版本等。
2. **JWT配置 `JwtSettings`**:
- 包含JWT的秘密密钥、算法以及过期时间配置。
3. **数据库配置 `DataBaseSettings`**:
- 配置数据库连接所需的参数,包括主机、端口、用户名、密码等。
4. **Redis配置 `RedisSettings`**:
- 提供Redis服务器的连接信息,如主机、端口、用户名和密码。
5. **上传配置 `UploadSettings`**:
- 定义文件上传的路径和允许的文件扩展名,同时确保相关目录存在。
6. **缓存目录配置 `CachePathConfig`**:
- 设置缓存目录的路径。
7. **配置获取类 `GetConfig`**:
- 负责解析命令行参数以确定运行环境,并加载相应的环境配置文件。
- 通过`lru_cache`优化配置的获取,使得相同的配置在多次调用时只被加载一次。
#### 功能:
- **命令行参数解析**: 允许用户在启动应用时指定运行环境。
- **环境变量加载**: 根据运行环境加载相应的`.env`文件。
- **配置实例化**: 在文件的最后,实例化各种配置,方便全局访问。
这是一个用于管理和加载应用配置的核心模块,有助于简化应用的配置管理和确保灵活性。
## [98/102] 请对下面的程序文件做一个概述: fastapi-backend/config/get_redis.py
### 概述:get_redis.py
**文件名**: `get_redis.py`
**功能**:
该文件定义了一个名为 `RedisUtil` 的类,提供与 Redis 数据库进行交互的多种异步方法,包括连接、关闭连接、以及初始化系统字典和配置的缓存。
**主要组件**:
1. **类定义**: `RedisUtil`
- 提供一系列与 Redis 操作相关的异步方法。
2. **方法**:
- `create_redis_pool(cls) -> aioredis.Redis`:
- 用于在应用启动时创建和初始化 Redis 连接池。
- 通过 Redis 配置类 (`RedisConfig`) 提取连接参数。
- 连接成功后记录日志,若失败则捕获并记录相应的错误。
- `close_redis_pool(cls, app)`:
- 用于在应用关闭时关闭 Redis 连接。
- 将 Redis 连接的关闭状态记录到日志中。
- `init_sys_dict(cls, redis)`:
- 在应用启动时,一次性从数据库缓存系统字典表的内容到 Redis。
- 使用异步数据库会话 (`AsyncSessionLocal`) 与字典服务 (`DictDataService`) 交互。
- `init_sys_config(cls, redis)`:
- 在应用启动时,一次性从数据库缓存参数配置表到 Redis。
- 使用异步数据库会话与配置服务 (`ConfigService`) 交互。
**异常处理**:
文件中处理了与 Redis 连接相关的几种异常情况,包括权限错误、超时错误和其他 Redis 相关错误,并通过日志记录详细的错误信息。
**依赖模块**:
- `redis.asyncio`: 用于异步 Redis 操作。
- `config.database`: 提供数据库连接。
- `config.env`: 包含 Redis 的配置信息。
- `module_admin.service`: 提供字典和配置服务。
- `utils.log_util`: 提供日志记录功能。
### 总结
`get_redis.py` 文件通过 `RedisUtil` 类实现了对 Redis 的异步管理,包含连接、关闭和数据初始化功能,是一个支持 FastAPI 应用与 Redis 数据库交互的工具类。
## [99/102] 请对下面的程序文件做一个概述: fastapi-backend/config/get_scheduler.py
### 概述:`get_scheduler.py`
该文件主要负责定时任务的管理与调度,使用了`APScheduler`库,并整合了数据库、Redis以及内存任务存储。具体功能包括任务的添加、删除、查询,以及监听任务事件并记录日志。
#### 核心组成部分:
1. **自定义 Cron 触发器 `MyCronTrigger`**:
- 继承自`CronTrigger`,重写了从 crontab 表达式生成任务触发器的逻辑,支持更复杂的时间配置。
2. **数据库连接**:
- 使用 SQLAlchemy 来构建与 MySQL 数据库的连接,支持连接参数的灵活配置(如最大连接数、连接回收等)。
3. **任务存储与执行器配置**:
- 支持三种作业存储:内存(`MemoryJobStore`)、SQLAlchemy(`SQLAlchemyJobStore`)及 Redis(`RedisJobStore`)。
- 配置线程池和进程池执行器,允许同时处理多个任务。
4. **`SchedulerUtil` 类**:
- 提供了多个类方法来管理调度器:
- `init_system_scheduler`: 初始化并启动调度器,加载已定义的定时任务。
- `close_system_scheduler`: 平滑关闭调度器。
- `get_scheduler_job`: 根据任务 ID 查询任务。
- `add_scheduler_job`: 向调度器添加新的任务,支持多种参数配置。
- `execute_scheduler_job_once`: 立即执行特定任务。
- `remove_scheduler_job`: 根据 ID 移除任务。
- `scheduler_event_listener`: 监听任务执行事件并记录执行日志,包括异常信息的捕捉。
#### 日志管理:
使用`JobLogModel`记录每个任务的执行状态及相关信息,帮助追踪与调试调度任务。
### 总结
该文件是一个高度模块化的定时任务管理器,提供了灵活的任务调度方案,可用于具体应用中的定时任务需求。
## [100/102] 请对下面的程序文件做一个概述: fastapi-backend/middlewares/gzip_middleware.py
### 概述文件:gzip_middleware.py
#### 文件路径
`fastapi-backend/middlewares/gzip_middleware.py`
#### 功能简介
该文件定义了一个函数,用于将 GZip 压缩中间件添加到 FastAPI 应用程序中。GZip 中间件用于压缩 HTTP 响应体,以减少数据传输量,从而提高应用性能。
#### 关键代码解析
- **导入模块**:
- 从 `fastapi` 导入 `FastAPI` 类。
- 从 `starlette.middleware.gzip` 导入 `GZipMiddleware` 类。
- **函数定义**:
```python
def add_gzip_middleware(app: FastAPI):
```
- `add_gzip_middleware` 函数接受一个 `FastAPI` 实例作为参数。
- **文档字符串**:
- 提供函数功能的简单描述,并说明参数的用途。
- **添加中间件**:
```python
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=9)
```
- 使用 `app.add_middleware` 方法将 `GZipMiddleware` 添加到应用中。
- `minimum_size=1000` 表示只有响应体大于 1000 字节时才会进行压缩。
- `compresslevel=9` 设置压缩级别为最大(0-9)。
#### 使用场景
在 FastAPI 应用中调用 `add_gzip_middleware` 函数,可以有效地减少大多数响应的大小,提升数据传输效率,尤其在带宽限制较大的环境中。
## [101/102] 请对下面的程序文件做一个概述: fastapi-backend/middlewares/handle.py
### 概述:`handle.py`
**文件路径**: `fastapi-backend/middlewares/handle.py`
**功能**:
该文件定义了一个处理FastAPI应用全局中间件的函数。
**主要内容**:
- 导入FastAPI框架以及两个自定义中间件管理函数:`add_cors_middleware` 和 `add_gzip_middleware`。
- 定义了函数 `handle_middleware(app: FastAPI)`:
- 该函数接受一个FastAPI应用对象作为参数。
- 调用 `add_cors_middleware(app)` 添加跨域资源共享(CORS)中间件。
- 调用 `add_gzip_middleware(app)` 添加Gzip压缩中间件。
**用途**:
通过这个中间件处理函数,可以方便地为FastAPI应用配置跨域和压缩功能,提高了代码的模块性和可重用性。
## [102/102] 请对下面的程序文件做一个概述: fastapi-backend/middlewares/cors_middleware.py
### 概述:`cors_middleware.py`
该文件定义了一个用于将跨域资源共享(CORS)中间件添加到FastAPI应用的函数。以下是文件的主要内容和功能概述:
1. **导入模块**:
- 从 `fastapi` 导入 `FastAPI` 类。
- 从 `fastapi.middleware.cors` 导入 `CORSMiddleware`。
2. **函数定义**:
- `add_cors_middleware(app: FastAPI)`:该函数接受一个 `FastAPI` 应用实例作为参数。
3. **CORS 配置**:
- **origins**: 定义允许跨域请求的前端URL列表,这里包括 `http://localhost:80` 和 `http://127.0.0.1:80`。
- **添加中间件**: 使用 `app.add_middleware` 方法,将 `CORSMiddleware` 添加到应用中,配置跨域请求的相关参数:
- `allow_origins`: 设置允许的源(origins)。
- `allow_credentials`: 启用是否允许发送凭据。
- `allow_methods`: 允许的HTTP方法(这里为所有方法 `'*'`)。
- `allow_headers`: 允许的请求头(这里也为所有头部 `'*'`)。
### 功能总结
该文件的主要目的是简化前端与后端的通信,允许指定的来源对后端API进行跨域请求,从而增强了开发过程中的灵活性。
全部 0条评论