LoginSignup
2
2

More than 5 years have passed since last update.

Djangoでrequest情報をどこからでも参照できるようにする

Last updated at Posted at 2018-07-22

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です!

最後に

株式会社ネコカリでは猫の手も借りたい🔥炎上中🔥なお仕事を募集しています!
一緒に働くメンバーも募集していますので、よかったら是非!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2