Python 如何在自定义保存方法中获取当前用户?

Python 如何在自定义保存方法中获取当前用户?,python,django,django-users,Python,Django,Django Users,我正在使用Django 1.8,我正在尝试实现一个简单的模型日志记录。我已重写该类的save方法。但是,我还想记录哪个用户负责更改,但是请求对象不可用,因为它没有传递到save方法中。我不想在save方法的所有事件中都传递给用户,因为我使用的是django rest framework 这是我的密码: def save(self, *args, **kwargs): order = super(Order, self).save(*args, **kwargs) try:

我正在使用Django 1.8,我正在尝试实现一个简单的模型日志记录。我已重写该类的save方法。但是,我还想记录哪个用户负责更改,但是请求对象不可用,因为它没有传递到save方法中。我不想在save方法的所有事件中都传递给用户,因为我使用的是django rest framework

这是我的密码:

def save(self, *args, **kwargs):
    order = super(Order, self).save(*args, **kwargs)
    try:
        json_object = serializers.serialize('json', [ order, ])
        # I want to log the current user too.
        OrderLog.objects.create(order = order, object = json_object)
    except Exception as e:
        print e
    return order

无法在模型的保存方法中获取执行请求的用户,因为模型是独立存在的。
您可以随时调用save方法,即使根本没有请求


因此,在调用save之前/之后,您需要将用户传递给每次save调用,或者需要登录调用save的函数。

可以获取当前用户。您必须为它实现自己的小型中间件

您需要以下方法和中间件类

您的中间件文件

from threading import local

_thread_locals = local()

def get_current_user():
    return getattr(_thread_locals, 'user', None)

class ThreadLocals( object ):
    """Middleware that gets various objects from the request object and saves them in thread local storage."""
    def process_request( self, request ):
    _thread_locals.user = getattr( request, 'user', None )
save(self):
    from your.path.to.middleware import get_current_user

    user = get_current_user()
设置.py

MIDDLEWARE_CLASSES += (
    "your.path.to.middleware.ThreadLocals"
)
您的保存方法是

from threading import local

_thread_locals = local()

def get_current_user():
    return getattr(_thread_locals, 'user', None)

class ThreadLocals( object ):
    """Middleware that gets various objects from the request object and saves them in thread local storage."""
    def process_request( self, request ):
    _thread_locals.user = getattr( request, 'user', None )
save(self):
    from your.path.to.middleware import get_current_user

    user = get_current_user()