内容安全审核
This commit is contained in:
BIN
schema/__pycache__/device_action_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/device_action_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/device_danger_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/device_danger_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/device_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/device_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/face_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/face_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/model_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/model_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/response_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/response_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/sensitive_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/sensitive_schema.cpython-310.pyc
Normal file
Binary file not shown.
BIN
schema/__pycache__/user_schema.cpython-310.pyc
Normal file
BIN
schema/__pycache__/user_schema.cpython-310.pyc
Normal file
Binary file not shown.
36
schema/device_action_schema.py
Normal file
36
schema/device_action_schema.py
Normal file
@ -0,0 +1,36 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型
|
||||
# ------------------------------
|
||||
class DeviceActionCreate(BaseModel):
|
||||
"""设备操作记录创建模型(0=离线、1=上线)"""
|
||||
client_ip: str = Field(..., description="客户端IP")
|
||||
action: int = Field(..., ge=0, le=1, description="操作状态(0=离线、1=上线)")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型(单条记录)
|
||||
# ------------------------------
|
||||
class DeviceActionResponse(BaseModel):
|
||||
"""设备操作记录响应模型(与自增表对齐)"""
|
||||
id: int = Field(..., description="自增主键ID")
|
||||
client_ip: Optional[str] = Field(None, description="客户端IP")
|
||||
action: Optional[int] = Field(None, description="操作状态(0=离线、1=上线)")
|
||||
created_at: datetime = Field(..., description="记录创建时间")
|
||||
updated_at: datetime = Field(..., description="记录更新时间")
|
||||
|
||||
# 支持从数据库结果直接转换
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 列表响应模型(仅含 total + device_actions)
|
||||
# ------------------------------
|
||||
class DeviceActionListResponse(BaseModel):
|
||||
"""设备操作记录列表(仅核心返回字段)"""
|
||||
total: int = Field(..., description="总记录数")
|
||||
device_actions: List[DeviceActionResponse] = Field(..., description="操作记录列表")
|
||||
33
schema/device_danger_schema.py
Normal file
33
schema/device_danger_schema.py
Normal file
@ -0,0 +1,33 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型
|
||||
# ------------------------------
|
||||
class DeviceDangerCreateRequest(BaseModel):
|
||||
"""设备危险记录创建请求模型"""
|
||||
client_ip: str = Field(..., max_length=100, description="设备IP地址(必须与devices表中IP对应)")
|
||||
type: str = Field(..., max_length=255, description="危险类型(如:病毒检测、端口异常、权限泄露等)")
|
||||
result: str = Field(..., description="危险检测结果/处理结果(如:检测到木马病毒、已隔离;端口22异常开放、已关闭)")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型
|
||||
# ------------------------------
|
||||
class DeviceDangerResponse(BaseModel):
|
||||
"""单条设备危险记录响应模型(与device_danger表字段对齐、updated_at允许为null)"""
|
||||
id: int = Field(..., description="危险记录主键ID")
|
||||
client_ip: str = Field(..., max_length=100, description="设备IP地址")
|
||||
type: str = Field(..., max_length=255, description="危险类型")
|
||||
result: str = Field(..., description="危险检测结果/处理结果")
|
||||
created_at: datetime = Field(..., description="记录创建时间(危险发生/检测时间)")
|
||||
updated_at: Optional[datetime] = Field(None, description="记录更新时间(数据库中该字段当前为null)")
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DeviceDangerListResponse(BaseModel):
|
||||
"""设备危险记录列表响应模型(带分页)"""
|
||||
total: int = Field(..., description="危险记录总数")
|
||||
dangers: List[DeviceDangerResponse] = Field(..., description="设备危险记录列表")
|
||||
56
schema/device_schema.py
Normal file
56
schema/device_schema.py
Normal file
@ -0,0 +1,56 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional, List, Dict
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型
|
||||
# ------------------------------
|
||||
class DeviceCreateRequest(BaseModel):
|
||||
"""设备创建请求模型"""
|
||||
ip: Optional[str] = Field(..., max_length=100, description="设备IP地址")
|
||||
hostname: Optional[str] = Field(None, max_length=100, description="设备别名")
|
||||
params: Optional[Dict] = Field(None, description="设备扩展参数(JSON格式)")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型
|
||||
# ------------------------------
|
||||
class DeviceResponse(BaseModel):
|
||||
"""单设备信息响应模型(与数据库表字段对齐)"""
|
||||
id: int = Field(..., description="设备主键ID")
|
||||
device_id: Optional[int] = Field(None, description="关联设备ID(若历史记录IP无对应设备则为None)")
|
||||
hostname: Optional[str] = Field(None, max_length=100, description="设备别名")
|
||||
device_online_status: int = Field(..., description="在线状态(1-在线、0-离线)")
|
||||
device_type: Optional[str] = Field(None, description="设备类型")
|
||||
alarm_count: int = Field(..., description="报警次数")
|
||||
params: Optional[str] = Field(None, description="扩展参数(JSON字符串)")
|
||||
client_ip: Optional[str] = Field(None, max_length=100, description="设备IP地址")
|
||||
is_need_handler: int = Field(..., description="是否需要处理(1-需要、0-不需要)")
|
||||
created_at: datetime = Field(..., description="记录创建时间")
|
||||
updated_at: datetime = Field(..., description="记录更新时间")
|
||||
model_config = {"from_attributes": True} # 支持从数据库结果直接转换
|
||||
|
||||
|
||||
class DeviceListResponse(BaseModel):
|
||||
"""设备列表响应模型"""
|
||||
total: int = Field(..., description="设备总数")
|
||||
devices: List[DeviceResponse] = Field(..., description="设备列表")
|
||||
|
||||
|
||||
class DeviceStatusHistoryResponse(BaseModel):
|
||||
"""设备上下线记录响应模型"""
|
||||
id: int = Field(..., description="记录ID")
|
||||
device_id: int = Field(..., description="关联设备ID")
|
||||
client_ip: Optional[str] = Field(None, description="设备IP地址")
|
||||
status: int = Field(..., description="状态(1-在线、0-离线)")
|
||||
status_time: datetime = Field(..., description="状态变更时间")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DeviceStatusHistoryListResponse(BaseModel):
|
||||
"""设备上下线记录列表响应模型"""
|
||||
total: int = Field(..., description="记录总数")
|
||||
history: List[DeviceStatusHistoryResponse] = Field(..., description="上下线记录列表")
|
||||
41
schema/face_schema.py
Normal file
41
schema/face_schema.py
Normal file
@ -0,0 +1,41 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型(前端传参校验)- 保留update的eigenvalue(如需更新特征值)
|
||||
# ------------------------------
|
||||
class FaceCreateRequest(BaseModel):
|
||||
"""创建人脸记录请求模型(无需ID、由数据库自增)"""
|
||||
name: Optional[str] = Field(None, max_length=255, description="名称(可选、最长255字符)")
|
||||
|
||||
|
||||
class FaceUpdateRequest(BaseModel):
|
||||
"""更新人脸记录请求模型 - 保留eigenvalue(如需更新特征值、不影响返回)"""
|
||||
name: Optional[str] = Field(None, max_length=255, description="名称(可选)")
|
||||
eigenvalue: Optional[str] = Field(None, description="特征值(可选、文件处理后可更新)") # 保留更新能力
|
||||
address: Optional[str] = Field(None, description="图片完整路径(可选、更新图片时使用)")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型(后端返回数据)- 核心修改:删除eigenvalue字段
|
||||
# ------------------------------
|
||||
class FaceResponse(BaseModel):
|
||||
"""人脸记录响应模型(仅返回需要的字段、移除eigenvalue)"""
|
||||
id: int = Field(..., description="主键ID(数据库自增)")
|
||||
name: Optional[str] = Field(None, description="名称")
|
||||
address: Optional[str] = Field(None, description="人脸图片完整保存路径(数据库新增字段)") # 仅保留address
|
||||
created_at: datetime = Field(..., description="记录创建时间(数据库自动生成)")
|
||||
updated_at: datetime = Field(..., description="记录更新时间(数据库自动生成)")
|
||||
|
||||
# 关键配置:支持从数据库查询结果(字典)直接转换
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class FaceListResponse(BaseModel):
|
||||
"""人脸列表分页响应模型(结构不变、内部FaceResponse已移除eigenvalue)"""
|
||||
total: int = Field(..., description="筛选后的总记录数")
|
||||
faces: List[FaceResponse] = Field(..., description="当前页的人脸记录列表")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
37
schema/model_schema.py
Normal file
37
schema/model_schema.py
Normal file
@ -0,0 +1,37 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
# 请求模型
|
||||
class ModelCreateRequest(BaseModel):
|
||||
name: str = Field(..., max_length=255, description="模型名称(必填、如:yolo-v8s-car)")
|
||||
description: Optional[str] = Field(None, description="模型描述(可选)")
|
||||
is_default: Optional[bool] = Field(False, description="是否设为默认模型")
|
||||
|
||||
|
||||
class ModelUpdateRequest(BaseModel):
|
||||
name: Optional[str] = Field(None, max_length=255, description="模型名称(可选修改)")
|
||||
description: Optional[str] = Field(None, description="模型描述(可选修改)")
|
||||
is_default: Optional[bool] = Field(None, description="是否设为默认模型(可选切换)")
|
||||
|
||||
|
||||
# 响应模型
|
||||
class ModelResponse(BaseModel):
|
||||
id: int = Field(..., description="模型ID")
|
||||
name: str = Field(..., description="模型名称")
|
||||
path: str = Field(..., description="模型文件相对路径")
|
||||
is_default: bool = Field(..., description="是否默认模型")
|
||||
description: Optional[str] = Field(None, description="模型描述")
|
||||
file_size: Optional[int] = Field(None, description="文件大小(字节)")
|
||||
created_at: datetime = Field(..., description="创建时间")
|
||||
updated_at: datetime = Field(..., description="更新时间")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class ModelListResponse(BaseModel):
|
||||
total: int = Field(..., description="总记录数")
|
||||
models: List[ModelResponse] = Field(..., description="当前页模型列表")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
13
schema/response_schema.py
Normal file
13
schema/response_schema.py
Normal file
@ -0,0 +1,13 @@
|
||||
from typing import Optional, Any
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class APIResponse(BaseModel):
|
||||
"""统一 API 响应模型(所有接口必返此格式)"""
|
||||
code: int = Field(..., description="状态码: 200=成功、4xx=客户端错误、5xx=服务端错误")
|
||||
message: str = Field(..., description="响应信息: 成功/错误描述")
|
||||
data: Optional[Any] = Field(None, description="响应数据: 成功时返回、错误时为 None")
|
||||
|
||||
# Pydantic V2 配置(支持从 ORM 对象转换)
|
||||
model_config = {"from_attributes": True}
|
||||
38
schema/sensitive_schema.py
Normal file
38
schema/sensitive_schema.py
Normal file
@ -0,0 +1,38 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型(前端传参校验)
|
||||
# ------------------------------
|
||||
class SensitiveCreateRequest(BaseModel):
|
||||
"""创建敏感信息记录请求模型"""
|
||||
name: str = Field(..., max_length=255, description="敏感词内容(必填)")
|
||||
|
||||
|
||||
class SensitiveUpdateRequest(BaseModel):
|
||||
"""更新敏感信息记录请求模型"""
|
||||
name: Optional[str] = Field(None, max_length=255, description="敏感词内容(可选修改)")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型(后端返回数据)
|
||||
# ------------------------------
|
||||
class SensitiveResponse(BaseModel):
|
||||
"""敏感信息单条记录响应模型"""
|
||||
id: int = Field(..., description="主键ID")
|
||||
name: str = Field(..., description="敏感词内容")
|
||||
created_at: datetime = Field(..., description="记录创建时间")
|
||||
updated_at: datetime = Field(..., description="记录更新时间")
|
||||
|
||||
# 支持从数据库查询结果(字典/对象)自动转换
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class SensitiveListResponse(BaseModel):
|
||||
"""敏感信息分页列表响应模型(新增)"""
|
||||
total: int = Field(..., description="敏感词总记录数")
|
||||
sensitives: List[SensitiveResponse] = Field(..., description="当前页敏感词列表")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
40
schema/user_schema.py
Normal file
40
schema/user_schema.py
Normal file
@ -0,0 +1,40 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 请求模型(前端传参校验)
|
||||
# ------------------------------
|
||||
class UserRegisterRequest(BaseModel):
|
||||
"""用户注册请求模型"""
|
||||
username: str = Field(..., min_length=3, max_length=50, description="用户名(3-50字符)")
|
||||
password: str = Field(..., min_length=6, max_length=100, description="密码(6-100字符)")
|
||||
|
||||
|
||||
class UserLoginRequest(BaseModel):
|
||||
"""用户登录请求模型"""
|
||||
username: str = Field(..., description="用户名")
|
||||
password: str = Field(..., description="密码")
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 响应模型(后端返回用户数据)
|
||||
# ------------------------------
|
||||
class UserResponse(BaseModel):
|
||||
"""用户信息响应模型(隐藏密码等敏感字段)"""
|
||||
id: int = Field(..., description="用户ID")
|
||||
username: str = Field(..., description="用户名")
|
||||
created_at: datetime = Field(..., description="创建时间")
|
||||
updated_at: datetime = Field(..., description="更新时间")
|
||||
|
||||
# Pydantic V2 配置(支持从数据库查询结果转换)
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class UserListResponse(BaseModel):
|
||||
"""用户列表分页响应模型(与设备/人脸列表结构对齐)"""
|
||||
total: int = Field(..., description="用户总数")
|
||||
users: List[UserResponse] = Field(..., description="当前页用户列表")
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
Reference in New Issue
Block a user