我有一个带有管理面板的 django 服务器。
不同的用户在那里进行更改,并通过数据库中的审计日志保存并显示在“历史记录”中。
但也有用户在另一个用户的账户下进入并代表他进行更改的情况。
为了识别从哪个设备进行了这个或那个更改,记录有关进行更改的用户的 IP 和他的唯一设备编号的数据是一个不错的决定。
通过重载“AuditlogMiddleware”类中的几个方法,我通过“uuid.UUID(int=uuid.getnode())”得到了想要的结果。
(本地测试,因为prod服务器负载很重,没办法做测试委员会)
from __future__ import unicode_literals
import threading
import time
from auditlog.middleware import AuditlogMiddleware
threadlocal = threading.local()
class ExtendedAuditlogMiddleware(AuditlogMiddleware):
def process_request(self, request):
threadlocal.auditlog = {
'signal_duid': (self.__class__, time.time()),
'remote_addr': request.META.get('REMOTE_ADDR'),
}
super(ExtendedAuditlogMiddleware, self).process_request(request)
**#changes here
import uuid
threadlocal.auditlog['additional_data'] = str(uuid.UUID(int=uuid.getnode()))+" | "+request.META["USERNAME"]**
# @staticmethod
def set_actor(self, user, sender, instance, signal_duid, **kwargs):
super(ExtendedAuditlogMiddleware, self).set_actor(user, sender, instance, signal_duid, **kwargs)
**#changes here
instance.additional_data = threadlocal.auditlog['additional_data']**
但问题是我认为我得到的不是用户的 UUID,而是服务器的 UUID,因为我猜是因为无法访问用户。我找不到信息,也想不出自己的解决方案。
问题 - 是否甚至可以从服务器获取有关 django 管理员用户设备的信息?
如果没有,我可以使用什么代替 UUID 来识别在 django 管理面板中进行更改时使用了哪个设备?
谢谢大家!