一.问题描述
某些情景下,我们需要在任意函数内获取request,但是django并没有给我们提供获取全局request的方法。
二.解决思路
当request到达视图函数前,会经过中间件拦截。我们可以自己写一个中间件,并设计成单例模式。然后在中间件中取得当前request对象,并保存在中间件对象中。
三.代码实现
middleware.py:
from django.utils.deprecation import MiddlewareMixin
class GlobalRequestMiddleware(MiddlewareMixin):
# TODO:待修改,暂时凑合
__instance = None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def process_request(self, request):
GlobalRequestMiddleware.__instance = request
@classmethod
def getRequest(cls):
return cls.__instance
不要忘了在settings中注册该中间件。
调用:
currentRequest = GlobalRequestMiddleware.getRequest()