如何在Django的每个管理员页面加载时运行一个Python函数
我想要一个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。