first commit
This commit is contained in:
67
WebAdmin/utils.py
Executable file
67
WebAdmin/utils.py
Executable file
@@ -0,0 +1,67 @@
|
||||
import logging
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
import re
|
||||
import pytz
|
||||
from datetime import datetime
|
||||
def get_logger(logger_name, log_file, when='midnight', backup_count=7):
|
||||
"""
|
||||
配置日志记录器并返回
|
||||
:param logger_name: 日志记录器名称
|
||||
:param log_file: 日志文件路径
|
||||
:param when: 日志滚动的时间间隔(默认:'midnight',即每天午夜滚动)
|
||||
:param backup_count: 保留的日志文件备份数量
|
||||
:return: 配置好的日志记录器
|
||||
"""
|
||||
logger = logging.getLogger(logger_name)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# 创建文件处理器,用于写入日志文件
|
||||
handler = TimedRotatingFileHandler(log_file, when=when, backupCount=backup_count)
|
||||
handler.setLevel(logging.INFO)
|
||||
|
||||
# 创建日志格式化器
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
# 将处理器添加到记录器中
|
||||
if not logger.hasHandlers():
|
||||
logger.addHandler(handler)
|
||||
|
||||
return logger
|
||||
|
||||
|
||||
|
||||
|
||||
def get_client_ip(request):
|
||||
"""获取客户端真实 IP 地址"""
|
||||
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
||||
if x_forwarded_for:
|
||||
ip_list = x_forwarded_for.split(',')
|
||||
ip = ip_list[0]
|
||||
else:
|
||||
ip = request.META.get('REMOTE_ADDR', '')
|
||||
return ip
|
||||
|
||||
def get_browser_language(request):
|
||||
"""获取浏览器语言"""
|
||||
return request.META.get('HTTP_ACCEPT_LANGUAGE', '')
|
||||
|
||||
def get_referrer(request):
|
||||
"""获取来源 URL"""
|
||||
return request.META.get('HTTP_REFERER', '直接访问')
|
||||
|
||||
def get_user_agent(request):
|
||||
"""获取用户代理字符串"""
|
||||
return request.META.get('HTTP_USER_AGENT', '')
|
||||
|
||||
def get_device_type(user_agent):
|
||||
"""根据用户代理判断设备类型(手机或电脑)"""
|
||||
mobile_patterns = ['Mobile', 'Android', 'iPhone', 'iPad', 'Windows Phone']
|
||||
for pattern in mobile_patterns:
|
||||
if re.search(pattern, user_agent, re.IGNORECASE):
|
||||
return 'Mobile'
|
||||
return 'Desktop'
|
||||
|
||||
def get_beijing_time(utc_time):
|
||||
|
||||
return datetime.now()
|
||||
Reference in New Issue
Block a user