SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

djangoを読み始めますた。

今やオープンソースな時代ですし、
よきコードはGithubに行けばいくらでも拾ってくることができるので、、
djangoのソースを毎日読んでいこうと思います。

最初は、『django/django/core/handlers/base.py』
ミドルウェアのロード部分をピックアップ。

class BaseHandler(object):
    # Changes that are always applied to a response (in this order).
    response_fixes = [
        http.fix_location_header,
        http.conditional_content_removal,
    ]

    def __init__(self):
        # 初期化??
        self._request_middleware = self._view_middleware
        = self._template_response_middleware
        = self._response_middleware = self._exception_middleware = None

    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:
            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
    self._request_middleware = request_middleware


ミドルウェアは、 Django のリクエスト/レスポンス処理をフック するためのフレームワークで、
MIDDLEWARE_CLASSESから呼び出して、適用するようです。

# ミドルウェアの適用。
・process_request : HttpResponseオブジェクト。Noneの場合は他のミドルウェア、適切なビューを返す。
・process_view : HttpResponseオブジェクトを返す。Noneの場合は他のミドルウェアのprocess_viewを試した後適切なビュー関数を呼び出す。
・process_response : HttpResponseオブジェクトを返す。
・process_exception : 例外処理。



どうもありがとうございますた。

Remove all ads