気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【Django】request.userについて(メモ)

昨日書いた記事に、以下のとおり追記した。

セッションに保有するユーザー情報を用いて各ビューでモデルから取得する方法
→request.userを利用すれば良い。

def any_view(request):
    if hasattr(request, 'user'):
        user = request.user
        any_list = AnyModel.objects.filter(user__username=user.username)

request.userのちょっとした調査

django.contrib.auth.middleware.pyの15行目

def get_user(request):
    if not hasattr(request, '_cached_user'):
        request._cached_user = auth.get_user(request)
    return request._cached_user


class AuthenticationMiddleware(object):
    def process_request(self, request):
        assert hasattr(request, 'session'), (
            "The Django authentication middleware requires session middleware "
            "to be installed. Edit your MIDDLEWARE_CLASSES setting to insert "
            "'django.contrib.sessions.middleware.SessionMiddleware' before "
            "'django.contrib.auth.middleware.AuthenticationMiddleware'."
        )
        request.user = SimpleLazyObject(lambda: get_user(request))
・process_requestメソッドの中でSimpleLazyObjectとして返却
・request.userを利用するためには、Django認証ミドルウェア?(AuthenticationMiddleware)が必要
 →settings.pyのMIDDLEWARE_CLASSの中で、有効になっていないと、
  アサートで引っかかる

process_requestやら、process_responseやら

各リクエストの送信やレスポンスの受信前に、リクエスト・レスポンスのオブジェクトに対して
何らかの設定を行う

django.core.handlers.base.pyの31行目に素敵なコードが書かれている

    def load_middleware(self):
        """
        Populate middleware lists from settings.MIDDLEWARE_CLASSES.

        Must be called after the environment is fixed (see __call__ in subclasses).
        """
        self._view_middleware = []
        self._template_response_middleware = []
        self._response_middleware = []
        self._exception_middleware = []

        request_middleware = []
        for middleware_path in settings.MIDDLEWARE_CLASSES:
            mw_class = import_string(middleware_path)
            try:
                mw_instance = mw_class()
            except MiddlewareNotUsed:
                continue

            if hasattr(mw_instance, 'process_request'):
                request_middleware.append(mw_instance.process_request)
            if hasattr(mw_instance, 'process_view'):
                self._view_middleware.append(mw_instance.process_view)
            if hasattr(mw_instance, 'process_template_response'):
                self._template_response_middleware.insert(0, mw_instance.process_template_response)
            if hasattr(mw_instance, 'process_response'):
                self._response_middleware.insert(0, mw_instance.process_response)
            if hasattr(mw_instance, 'process_exception'):
                self._exception_middleware.insert(0, mw_instance.process_exception)

        # We only assign to this when initialization is complete as it is used
        # as a flag for initialization being complete.
        self._request_middleware = request_middleware