如何在Django中的每个Admin页面加载上运行python函数

时间:2014-07-16 13:40:12

标签: python django python-3.x django-admin

我希望在加载管理界面的页面时运行python函数。这不需要在每个页面加载(即非管理员相关页面)上运行。此函数需要请求对象或用户ID。

我知道我可以创建一个新视图并从页面中的javascript调用它,但这似乎是一种可怕的方式。有没有办法以某种方式将一个函数附加到管理页面加载服务器端而不添加任何其他依赖项?

更新:该功能用于挂钩到一种日志记录系统,该系统每天跟踪每个用户使用管理界面时需要更新的每个用户的第一次/最后一次交互。似乎中间件应用程序允许我做我想做的事,谢谢你们!

3 个答案:

答案 0 :(得分:3)

免责声明:我不太了解Django perse的内部或API。

您需要使用/编写的是中间件组件。

请参阅:Django Middleware

琐碎的例子:

类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

另见:Effective Django的Understanding Django Middleware

答案 1 :(得分:2)

一种方法是创建一个中间件并检查每个页面请求是否为管理页面:

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

答案 2 :(得分:0)

我会以一种简单的方式处理它。找到管理员必须执行的功能,例如save_model()。然后将自己的功能放入其中。