Djangoグローバルrequestの取得
895 ワード
一.問題の説明
いくつかのシナリオでは、任意の関数内でrequestを取得する必要がありますが、djangoはグローバルrequestを取得する方法を提供していません.
二.解決策
requestがビュー関数に到達する前に、ミドルウェアによってブロックされます.私たちは自分でミドルウェアを書いて、単例モードに設計することができます.次に、ミドルウェアで現在のrequestオブジェクトを取得し、ミドルウェアオブジェクトに保存します.
三.コード実装
middleware.py:
settingsにミドルウェアを登録することを忘れないでください.
呼び出し:
いくつかのシナリオでは、任意の関数内で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()