這裏主要分析Flask對象實例化後,整個應用的啓動過程都發生了什麼。 1.執行app.__call__方法:
2.執行app.wsgi_app():
這一步都作了什麼? self.request_content(environ)
實例化RequestContext對象
1處作了什麼?
調用 app.create_url_adapter 方法,把 app 的 url_map 綁定到 WSGI environ 變量上。cookie
最後會調用 match_request 方法,這個方法調用了 url_adapter.match 方法,進行實際的匹配工做,返回匹配的 url rule。session
定義與request相關的g變量
說明:處理請求時用做臨時存儲的對象(Appcontext類型)app
接下來執行RequestContext對象的push方法:加密
分析:url
1剛開始是None; 2.實例化APPContext對象 3.執行APPcontext對象的push方法
建立LocalStack對象,也就是建立一個棧,把AppContext對象壓入棧中
而後:spa
把RequestContext對象壓入到LocalStack中(和上面是兩個棧)翻譯
push方法都作了什麼?3d
.......夜深了,回頭補充code
緊接着:對象
執行Flask對象的open_opensession()方法
調用了app的open_session:
SecureCookieSessionInterface().open_session() 接着看都作了什麼?
def open_session(self, app, request):
#獲取加解密對象 s = self.get_signing_serializer(app) if s is None: return None # 從cookies中獲取cookie的名字:'session' val = request.cookies.get(app.session_cookie_name) if not val: #若是val爲空,則返回SecureCookieSession對象,至關於{} #session_class = SecureCookieSession return self.session_class() max_age = total_seconds(app.permanent_session_lifetime) try: # 解密返回原始數據 data = s.loads(val, max_age=max_age) #session_class = SecureCookieSession至關於{},根據代碼追溯能夠發現,基類繼承dict #"""Base class for sessions based on signed cookies.""" #翻譯一下:基於加密cookies的session基類 return self.session_class(data) except BadSignature: return self.session_class()
3.接下來執行:
未完....