我有一个功能可以检查是否应该向在我的Django应用程序中支付较晚的用户收取延迟付款费用。由于我无法编写cron作业,因此每次用户访问我的应用程序时都必须运行此函数。
我可以在我的应用程序的每个视图的开头调用此函数,但这将重复函数名称。
每次用户访问我的Django应用程序时,如何运行函数?我是否应该在settings.py中调用该函数?
答案 0 :(得分:2)
编写您自己的中间件并将其添加到设置中的中间件列表中。中间件本身只是一个具有一些函数的类,它们作为请求处理链中某些点的钩子:
class MyMiddleware (request):
process_request(self,request):
# do something here before passing the request to the view
process_response(self,request,response):
# do something here before passing the response to the client
还有一些其他的钩子可以指定你的功能所在的确切位置,你最好看看the docs,看看哪种情况最适合你的情况。
在设置中,只需将中间件添加到中间件类:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'your_app.middleware.MyMiddleware',
)
这应该完全符合你的要求。