FastAPI搭建Python后台管理系统详细解析(一)
FastAPI是一个现代、快速(高性能)的Web框架,旨在使用Python构建API,特别是使用Python 3.6及以上版本中的类型提示。它的主要特点包括:
高性能:FastAPI基于Starlette和Pydantic构建,提供非常快的性能,接近Node.js和Go等语言的水平。
易于使用:框架设计友好,具有清晰的文档,开发者可以快速上手。
类型提示:使用Python类型提示来自动生成API文档,提供更好的代码提示和验证功能。
自动生成文档:FastAPI自动生成交互式API文档(Swagger UI和ReDoc),使得开发者和用户能够方便地查看和测试API。
异步支持:支持异步编程,使得开发者能够更好地处理并发请求,提高应用性能。
FastAPI特别适合构建RESTful API、微服务和数据驱动的应用程序。
作为人工智能时代最适合的语言Python,却没有一套美观大方的开源后台管理系统,经过Github的查找,发觉这套python后台管理系统很不错,因而在此跟大家分享,本着不要重复造轮子的开源精神,计划在巨人的肩膀上继续前行,在此基础上完善和扩展这款python后台管理系统,打造一套基于python的开源的知识付费平台。欢迎关注我的github开源项目。下面先来分享一下开源后台管理系统的解析。
这套后台管理系统基于目前最流行的理念打造,后端采用API形式提供服务,这也是为什么采用FastAPI作为框架的原因。至于前端,主要是看面向web应用和还是小程序应用。
## 接下来逐文件分析下面的工程[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.zip.extract/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.zip.extract/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` 的相关依赖在项目中正确实现。
全部 0条评论