0

我有一个带有管理面板的 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 管理面板中进行更改时使用了哪个设备?
谢谢大家!

4

1 回答 1

0

尝试在模板中使用 javascript 来发送此信息

于 2022-02-21T16:53:18.457 回答