如何在Django的每个管理员页面加载时运行一个Python函数

4 投票
3 回答
2256 浏览
提问于 2025-04-18 13:32

我想要一个Python函数,在每次加载管理员界面的页面时都能运行。这个函数不需要在每个页面加载时都运行(比如非管理员相关的页面)。这个函数需要请求对象或者用户ID。

我知道我可以创建一个新的视图,然后通过页面上的JavaScript来调用它,但这样做感觉很糟糕。有没有办法在服务器端将一个函数附加到管理员页面加载上,而不需要添加任何额外的依赖?

更新:这个函数是用来连接一个日志系统的,记录每个用户每天的首次和最后一次互动,每当用户使用管理员界面时都需要更新。看起来使用中间件应用可以实现我想要的功能,谢谢大家!

3 个回答

0

我会用一个简单的方法来处理这个问题。找一个管理员必须执行的函数,比如 save_model()。然后把你自己的函数放进去。

3

一种方法是创建一个中间件,每次请求页面时都检查一下这个页面是否是管理员页面:

https://docs.djangoproject.com/en/dev/topics/http/middleware/

5

免责声明:我对Django的内部结构或API了解得不多。

你需要使用或编写的是一个中间件组件。

可以参考:Django中间件

简单示例:

class LocaleMiddleware(object):

def process_request(self, request):

    if 'locale' in request.cookies:
        request.locale = request.cookies.locale
    else:
        request.locale = None

def process_response(self, request, response):

    if getattr(request, 'locale', False):
        response.cookies['locale'] = request.locale

另请参见:理解Django中间件,来自Effective Django。

撰写回答