Django获取全局request

一.问题描述

    某些情景下,我们需要在任意函数内获取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()

猜你喜欢

转载自blog.csdn.net/qq_39687901/article/details/81387584