requestされたurlのパスに応じて、データベースの振る舞いであったりコアな部分の挙動を少し変えたい……ということがあったので。
reqeust情報をこの関数まで持ってくるのが辛いな、ということがあったので、
あまり良い実装ではなさそうなんですが、どこからでも参照できるようにしてみました。
実装例
Djangoのミドルウェアを新規に追加して、
そのミドルウェアの中でrequest情報を保存、参照できるようにしました。
ミドルウェアについては下を参照で。
import threading
GLOBAL_REQUEST_CONTEXT = threading.local()
def custom_middleware(get_response):
def middleware(request):
GLOBAL_REQUEST_CONTEXT.request = request
return get_response(request)
return middleware
def get_request():
try:
return GLOBAL_REQUEST_CONTEXT.request
except AttributeError:
return None
やっていることは超単純なんですが、キモはthreading.local()です。
これを設定してあげないと、リクエストを受けた際に各ユーザごとの情報が入り乱れてしまうので😭
ここまで実装できたら、後はget_request() をrequest情報が欲しいところで呼んであげればOKです!
最後に
株式会社ネコカリでは猫の手も借りたい🔥炎上中🔥なお仕事を募集しています!
一緒に働くメンバーも募集していますので、よかったら是非!