Колба рамки исходного кода чтения весь процесс

Колба рамки исходного кода чтения весь процесс

"" " 
App.run () 
, по существу , выполняется это run_simple (внутрибрюшинно, Host, Self) 
Атман текущая цель приложение 
приложение .__ call__ 
" ""

Golbal файлы, создавать эти объекты

_request_ctx_stack = LocalStack () 
_app_ctx_stack = LocalStack () 
current_app = LocalProxy (_find_app) 
Запрос = LocalProxy (частичный (_lookup_req_object, " запрос " )) 
сессия = LocalProxy (частичный (_lookup_req_object, " Сессия " ))

Каждый раз, когда есть запрос будет выполнен app.wsig_app (окружать, start_response)

app.wsig_app Источник:

    DEF wsgi_app (Self, Environ, The start_response):
         # объект RequestContext, то , что содержит текущий запрос. 
        = СТХ self.request_context (Environ) 
        ошибка = Отсутствует
         Попробовать :
             Попробовать :
                 # объект RequestContext, ctx.push, метод толчок выполняется RequestContext объект 
                # СТХ помещен в местном 
                ctx.push ()
                 # запроса и расширенной функции отклика 
                ответ = self.full_dispatch_request ()
             исключения того исключения , так как E: 
                ошибка = E 
                Response =self.handle_exception (е)
             , за исключением :   # noqa: B001 
                ошибки = sys.exc_info () [1 ]
                 повышение 
            возврата ответа (окружать, start_response)
         , наконец :
             если self.should_ignore_error (ошибка): 
                ошибка = None 
            ctx.auto_pop (ошибка)

CTX = self.request_context (окружать) сделал то, что? CTX = RequestContext объект, который должен запросить все необходимые вещи, как:

# 1 Мы self.request_context (окружать) исполнение: Так CTX является RequestContext (я, окружать) возвращаемое значение: 
        DEF request_context (Self, Environ):
             # дождаться возвращения CTX является результатом RequestContext () исполнения. 
            Возвращение RequestContext (Self, Environ)
 # 2 RequestContext (Self, Environ) Каковы результаты реализации? Является ли RequestContext объекта , который содержит reuqest информации , такие как 
класс RequestContext (Object):
     # App, Environ, CTX, является RequestContext объекта 
    DEF  __init__ (Self, приложение, Environ, Запрос = нет, сессия = None): 
        Сам .app = App
         ЕСЛИ Запрос IS Нет: 
            Запрос =app.request_class (Environ) 
        self.request = запрос

ctx.push (), CTX здесь подлежит RequestContext

# Метод 1 Нажмите метод ctx.push реализации объекта RequestContext: 
# Источник: 
    DEF методом рассылки (самостоятельно):
         # Текущий самость объект RequestContext является CTX, 
        _request_ctx_stack.push (Я)
 # 2 _request_ctx_stack, мы нашли это глобальный LocalStack () объекта. 
# _Request_ctx_stack.push (Self) является реализацией методы LocalStack толчка в и нажмите CTX , передаваемый в методе # _request_ctx_stack.push. CTX = Автономный 
# LocalStack толкающий Источник: 
  
    DEF PUSH (Self, OBJ): 
        RV = GetAttr (self._local, " Стек " , None)
         IF RV НЕ None:
             # Хранение [нити сопрограммная ID] [ "стек" ] = []
            = RV = self._local.stack [] 
        rv.append (объект) 
        возвращение RV 
    
# выше коды self._local Локальных объектов используются для обеспечения безопасности данных. 
# Когда выполнение кода self._local.stack = RV = [], а затем Локальная структура хранения объекта: хранение [нить сопрограмма ID] [ "Стек"] = [] 
# rv.append (OBJ), хранение [нить сопрограмма ID] [ "стек"] = [OBJ], и потому , что OBJ = CTX, даже помещается в CTX Локальный объект. Структура , как местная (). Хранение [нить сопрограмма ID] [ "стек"] = [CTX]

ответ = self.full_dispatch_request ()

# 1 
# Это предложение обратиться к нам , чтобы выполнить расширение и функцию отклика 
# , а затем запросить продление и ответных действий , которые вы можете использовать запрос, и если он хочет добиться? 
из Колба Импорта Колбы, запрос, сессии 
App = Колба ( в __name__ )
 DEF индекса ():
     Print (request.method)
     Печать (сессия)
     возвращение   « OK » 
# таких , как выше кода request.method, как получить содержимое , связанное с запросом это? 


# 2 

# мы увидим , что и запрос смысл? 
= Запрос LocalProxy (частичный (_lookup_req_object, « запрос » ))
 # Мы обнаружили , что объект запроса является LocalProxy. 
#Тогда мы должны быть в состоянии найти другой метод LocalProxy свойства, но обнаружили , нет, так как там нет, он должен написать __getattr__ 
# посмотреть __getattr__ источник: 
 DEF  __getattr__ (Self, имя):
         # request.method, имя теперь метод, 
        ЕСЛИ имя == « __members__ » :
             возвращение реж (self._get_current_object ())
         # теперь имя метода, результаты self._get_current_object () функция результатого выполнения на стороне 
        # результатов частичной функции для получения метода, 
        # частичных исполнение результат функции запроса. 
        # etattr (Request, метод,) 
        возвращение GetAttr (self._get_current_object (), имя) 
    
    
    
# 3      
# мы смотрим на _get_current_object () Что является результатом выполнения? 
#self._get_current_object () Источник: 
    DEF _get_current_object (Self):
             возвращение . Само __local ()       
 # выше self._get_current_object результата выполнения () само .__ локальный) результат выполнения ( 


# 4 
# Само .__ Что такое местное? 
# Мы нашли это экземпляр я .__ местное время прошло, также местный, следующий код 
 DEF  __init__ (Self, местное, имя = None):
         # собственного .__ местного _LocalProxy__local = = частичный локальный (_lookup_req_object, "Запрос") 
        # Домашняя .__ местного набора свойств , чтобы скрыть, 
        Object. __setattr__ (Self, " _LocalProxy__local " , местный)
        #.__ = местный местное самоуправление 
    
# локальный экземпляр передаются. Мы экземпляр этого LocalProxy (частичный (_lookup_req_object "Request")) 
# наш Самостоятельно .__ = местные = self._get_current_object локальный = частичный (_lookup_req_object, "Запрос") 

# 5 
# , что в конечном счете , мы понимаем: 
DEF  __getattr__ (Self, имя ):
         # request.method, название теперь метод, 
        IF имя == " __members__ " :
             возвращение реж (self._get_current_object ())
         возвращение GetAttr (self._get_current_object (), имя) 
    
# self._get_current_object результат выполнения () частичный (_lookup_req_object, «запрос») результатов. 
#Является ctx.request, так GetAttr (self._get_current_object (), имя) , соответствующее GetAttr (ctx.request, метод) 

# 6. 
# Частичный (_lookup_req_object, "Запрос") () результат выполнения 
# _lookup_req_object кода следующим образом : 

DEF _lookup_req_object (имя):
     # имя здесь «Запрос» 
    сверху = _request_ctx_stack.top 
  
    # кто сверху? Является CTX. 
    IF Top ЯВЛЯЕТСЯ Нет:
         Рейз RuntimeError (_request_ctx_err_msg)
     # Top внутри , чтобы найти запрос, а именно топ = CTX - «CTX найти внутри запроса. 
    Возврат GetAttr (Top, имя) 

# 7 
#А поскольку объект _request_ctx_stack LocalStack () объекта, так _request_ctx_stack.top выполняется LocalStack () в верхней части: 
# _request_ctx_stack.top Источник: 
    @property
     DEF Top (Self):
         Попробовать :
             # хранение [нить ассоциации Ченг ID] [ "Стек"] = [СОЕ] 
            # теперь верхнего значение Retrun СОГО 
            возврата self._local.stack [-1 ]
         исключение того (AttributeError, IndexError):
             возвращение Отсутствует
 # коды self._local Локальных объектов, Местный является объектом нашего времени существования CTX.        

 

рекомендация

отwww.cnblogs.com/baohanblog/p/12535584.html