346 lines
9.3 KiB
Python
Raw Permalink Normal View History

2025-02-13 02:27:44 +08:00
# _*_ coding : UTF-8 _*_
# @Time : 2025/01/19 00:03
# @UpdateTime : 2025/01/19 00:03
# @Author : sonder
# @File : log.py
# @Software : PyCharm
# @Comment : 本程序
from tortoise import fields
from models.common import BaseModel
class LoginLog(BaseModel):
"""
系统访问记录表模型
"""
user = fields.ForeignKeyField(
"models.User",
related_name="login_logs",
description="用户ID",
source_field="user_id" # 映射到数据库字段 user_id
)
"""
用户ID
- 外键关联到 User
- 映射到数据库字段 user_id
"""
login_ip = fields.CharField(
max_length=50,
description="登录IP地址",
source_field="login_ip" # 映射到数据库字段 login_ip
)
"""
登录IP地址
- 最大长度为 50 个字符
- 映射到数据库字段 login_ip
"""
login_location = fields.CharField(
max_length=255,
null=True,
description="登录地点",
source_field="login_location" # 映射到数据库字段 login_location
)
"""
登录地点
- 根据 IP 地址解析的地理位置信息
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 login_location
"""
browser = fields.CharField(
max_length=255,
null=True,
description="浏览器类型",
source_field="browser" # 映射到数据库字段 browser
)
"""
浏览器类型
- 记录用户登录时使用的浏览器类型
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 browser
"""
os = fields.CharField(
max_length=255,
null=True,
description="操作系统",
source_field="os" # 映射到数据库字段 os
)
"""
操作系统
- 记录用户登录时使用的操作系统
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 os
"""
status = fields.SmallIntField(
default=1,
description="登录状态1成功0失败",
source_field="status" # 映射到数据库字段 status
)
"""
登录状态
- 1成功
- 0失败
- 默认为 1
- 映射到数据库字段 status
"""
login_time = fields.DatetimeField(
auto_now_add=True,
description="登录时间",
source_field="login_time" # 映射到数据库字段 login_time
)
"""
登录时间
- 自动设置为当前时间
- 映射到数据库字段 login_time
"""
session_id = fields.CharField(
max_length=36,
null=True,
description="会话ID",
source_field="session_id"
)
"""
会话ID
- 记录用户登录时的会话ID
- 允许为空
- 映射到数据库字段 session_id
"""
class Meta:
table = "login_log" # 数据库表名
table_description = "系统访问记录表" # 表描述
ordering = ["-login_time"] # 默认按登录时间倒序排序
class OperationLog(BaseModel):
"""
操作日志表模型
"""
operation_name = fields.CharField(
max_length=255,
description="操作名称",
source_field="operation_name" # 映射到数据库字段 operation_name
)
"""
操作名称
- 最大长度为 255 个字符
- 映射到数据库字段 operation_name
"""
operation_type = fields.SmallIntField(
description="操作类型(增删改查)",
source_field="operation_type" # 映射到数据库字段 operation_type
)
"""
操作类型
- 查等操作类型
- 最大长度为 50 个字符
- 映射到数据库字段 operation_type
"""
request_path = fields.TextField(
description="请求路径",
source_field="request_path" # 映射到数据库字段 request_path
)
"""
请求路径
- 记录用户请求的 API 路径
- 最大长度为 255 个字符
- 映射到数据库字段 request_path
"""
request_method = fields.CharField(
max_length=10,
description="请求方法",
source_field="request_method" # 映射到数据库字段 request_method
)
"""
请求方法
- 记录用户请求的 HTTP 方法 GETPOSTPUTDELETE
- 最大长度为 10 个字符
- 映射到数据库字段 request_method
"""
operator = fields.ForeignKeyField(
"models.User",
related_name="operation_logs",
null=True, # 允许操作人员为空
description="操作人员",
source_field="operator_id" # 映射到数据库字段 operator_id
)
"""
操作人员
- 外键关联到 User
- 允许为空
- 映射到数据库字段 operator_id
"""
department = fields.ForeignKeyField(
"models.Department",
related_name="operation_logs",
null=True, # 允许操作人员为空
description="操作人员所属部门",
source_field="department_id" # 映射到数据库字段 department_id
)
"""
操作人员所属部门
- 外键关联到 Department
- 允许为空
- 映射到数据库字段 department_id
"""
department_name = fields.CharField(
max_length=255,
description="部门名称",
source_field="department_name" # 映射到数据库字段 department_name
)
"""
部门名称
- 记录操作人员所属的部门名称
- 最大长度为 255 个字符
- 映射到数据库字段 department_name
"""
host = fields.CharField(
max_length=50,
description="主机地址",
source_field="host" # 映射到数据库字段 host
)
"""
主机地址
- 记录用户请求的 IP 地址
- 最大长度为 50 个字符
- 映射到数据库字段 host
"""
location = fields.CharField(
max_length=255,
null=True,
description="操作地点",
source_field="location" # 映射到数据库字段 location
)
"""
操作地点
- 根据 IP 地址解析的地理位置信息
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 location
"""
user_agent = fields.TextField(
null=True,
description="用户请求头",
source_field="user_agent" # 映射到数据库字段 user_agent
)
"""
用户请求头
- 记录用户请求的 User-Agent 信息
- 允许为空
- 映射到数据库字段 user_agent
"""
browser = fields.CharField(
max_length=255,
null=True,
description="浏览器类型",
source_field="browser" # 映射到数据库字段 browser
)
"""
浏览器类型
- 记录用户登录时使用的浏览器类型
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 browser
"""
os = fields.CharField(
max_length=255,
null=True,
description="操作系统",
source_field="os" # 映射到数据库字段 os
)
"""
操作系统
- 记录用户登录时使用的操作系统
- 最大长度为 255 个字符
- 允许为空
- 映射到数据库字段 os
"""
request_params = fields.TextField(
null=True,
description="请求参数",
source_field="request_params" # 映射到数据库字段 request_params
)
"""
请求参数
- 记录用户请求的参数任意格式如字符串JSONXML
- 允许为空
- 映射到数据库字段 request_params
"""
response_result = fields.TextField(
null=True,
description="返回结果",
source_field="response_result" # 映射到数据库字段 response_result
)
"""
返回结果
- 记录操作的返回结果任意格式如字符串JSONXML
- 允许为空
- 映射到数据库字段 response_result
"""
status = fields.SmallIntField(
default=1,
description="操作状态1成功0失败",
source_field="status" # 映射到数据库字段 status
)
"""
操作状态
- 1成功
- 0失败
- 默认为 1
- 映射到数据库字段 status
"""
operation_time = fields.DatetimeField(
auto_now_add=True,
description="操作时间",
source_field="operation_time" # 映射到数据库字段 operation_time
)
"""
操作时间
- 自动设置为当前时间
- 映射到数据库字段 operation_time
"""
cost_time = fields.FloatField(
default=0,
description="消耗时间(毫秒)",
source_field="cost_time" # 映射到数据库字段 cost_time
)
"""
消耗时间
- 记录操作消耗的时间单位毫秒
- 默认为 0
- 映射到数据库字段 cost_time
"""
class Meta:
table = "operation_log" # 数据库表名
table_description = "操作日志表" # 表描述
ordering = ["-operation_time"] # 默认按操作时间倒序排序