41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
from flask import request, current_app
|
|
from flask_login import current_user
|
|
from app.models.log import Log
|
|
|
|
|
|
def record_activity(action, target_type=None, target_id=None, description=None):
|
|
"""
|
|
记录用户活动
|
|
|
|
参数:
|
|
- action: 操作类型,如 'login', 'logout', 'create', 'update', 'delete', 'borrow', 'return' 等
|
|
- target_type: 操作对象类型,如 'book', 'user', 'borrow' 等
|
|
- target_id: 操作对象ID
|
|
- description: 操作详细描述
|
|
"""
|
|
try:
|
|
# 获取当前用户ID
|
|
user_id = current_user.id if current_user.is_authenticated else None
|
|
|
|
# 获取客户端IP地址
|
|
ip_address = request.remote_addr
|
|
if 'X-Forwarded-For' in request.headers:
|
|
ip_address = request.headers.getlist("X-Forwarded-For")[0].rpartition(' ')[-1]
|
|
|
|
# 记录日志
|
|
Log.add_log(
|
|
action=action,
|
|
user_id=user_id,
|
|
target_type=target_type,
|
|
target_id=target_id,
|
|
ip_address=ip_address,
|
|
description=description
|
|
)
|
|
|
|
return True
|
|
except Exception as e:
|
|
# 记录错误,但不影响主要功能
|
|
if current_app:
|
|
current_app.logger.error(f"Error recording activity log: {str(e)}")
|
|
return False
|