FastAPI搭建Python后台管理系统文件概述(四)

john
john 在知识的海洋中遨游

0 人点赞了该文章 · 454 浏览

## [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进行跨域请求,从而增强了开发过程中的灵活性。

发布于 2024-10-11 22:11

免责声明:

本文由 john 原创或转载,著作权归作者所有,如有侵权,请联系我们删除。 info@frelink.top

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

All Rights Reserved Frelink ©2025