flask-session总结
一、session
? ? ? session和cookie的原理和區(qū)別:
? ? ? ? ? ? ?cookie是保存在瀏覽器上的鍵值對
? ? ? ? ? ? ?session是存在服務端的鍵值對(服務端的session就是一個大字典,字典中是隨機字符串)(session與request原理相同)(session原理跟上下文也有關系)
? ? ? ? ? ? ?session依賴于cookie存在
? ? ? ? ? ? ?session流程
? ? ? ? ? ? ? ? ?當請求第一次進來,生成隨機字符串
? ? ? ? ? ? ? ? ? -發(fā)給用戶cookie
? ? ? ? ? ? ? ? ? -保存到session字典中時
? ? ? ? ? ? ? ? ? 它調(diào)用stark將隨機字符串和對應的值放到local
? ? ? ? ? ? ? ? 視圖函數(shù)
? ? ? ? ? ? ? ? ?-使用時導入用top(它拿的是session)
? ? ? ? ? ? ? ? ? ? ?session=LocalProxy(partile(_lookup_req_object,'session '))
? ? ? ? ? ? ? ?請求處理完畢:
? ? ? ? ? ? ? ? ? ? ?內(nèi)存處理完畢后,將session做持久化(session存到數(shù)據(jù)庫,存到Redis,存到加密的cookie中)
二、session源碼解析? ? ?
? ? ? ? ? ? ? 1.先執(zhí)行Flask的__call__方法 ,調(diào)用出來wsgi_app,它先做request的上下文做完,請求剛進來到push中,它先處理request將請求相關的數(shù)據(jù),然后添加到了local中,
? ? ? ? ? ? ? ? ?緊接著處理session(將RequestContext對象(request,session)添加到local中),request(將request信息封裝到Request(environ)對象并復制給requestContext 對? ? ? ? ? ? ? ? ? ? ? ?象),然后獲取cookie中的隨機字符串,檢驗是否有,沒有就生成。根據(jù)隨機字符串,獲取服務端session保存的值。把session放到內(nèi)存中,
? ? ? ? ? ? ? ? ?執(zhí)行wsgi_app方法下面的視圖函數(shù)。執(zhí)行完視圖函數(shù)返回到full_dispatch_requesthong ,觸發(fā)只執(zhí)行一次的裝飾器中(觸發(fā)Flask信號),
? ? ? ? ? ? ? ? ?執(zhí)行完這個裝飾器,緊接著執(zhí)行下面的特殊的裝飾器,如果這些特殊裝飾器沒有返回值,那么rv=None,如果有返回值,頁面時就顯示這個返回值,
? ? ? ? ? ? ? ? ?如果沒有返回值,觸發(fā)執(zhí)行那個視圖函數(shù),拿返回值。請求執(zhí)行完返回后,調(diào)用finalize_request,對它的返回值進行封裝。
三、Flask和Django的區(qū)別
? ? ? ? ? ?請求相關的數(shù)據(jù)
? ? ? ? ? ? ? ? -Django:參數(shù)
? ? ? ? ? ? ? ? -Flask:? ? 基于Local,LocalStark對象
? ? ? ? ? ? 多個請求進來會不會混淆
? ? ? ? ? ? ? ? ? -單線程
? ? ? ? ? ? ? ? ? -多線程
? ? ? ? ? ? ? ? ? -協(xié)程
? ? ? ? ? ? ? ? ? ? 解決: from greenlet import getcurrent as get_ident
轉(zhuǎn)載于:https://www.cnblogs.com/moning/p/8455511.html
總結(jié)
以上是生活随笔為你收集整理的flask-session总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用浏览器访问或调试微信公众号(跳过微信
- 下一篇: 高精——模板