日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flask-session总结

發布時間:2023/12/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask-session总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、session

? ? ? session和cookie的原理和區別:

? ? ? ? ? ? ?cookie是保存在瀏覽器上的鍵值對
? ? ? ? ? ? ?session是存在服務端的鍵值對(服務端的session就是一個大字典,字典中是隨機字符串)(session與request原理相同)(session原理跟上下文也有關系)
? ? ? ? ? ? ?session依賴于cookie存在
? ? ? ? ? ? ?session流程
? ? ? ? ? ? ? ? ?當請求第一次進來,生成隨機字符串
? ? ? ? ? ? ? ? ? -發給用戶cookie
? ? ? ? ? ? ? ? ? -保存到session字典中時
? ? ? ? ? ? ? ? ? 它調用stark將隨機字符串和對應的值放到local
? ? ? ? ? ? ? ? 視圖函數
? ? ? ? ? ? ? ? ?-使用時導入用top(它拿的是session)
? ? ? ? ? ? ? ? ? ? ?session=LocalProxy(partile(_lookup_req_object,'session '))
? ? ? ? ? ? ? ?請求處理完畢:
? ? ? ? ? ? ? ? ? ? ?內存處理完畢后,將session做持久化(session存到數據庫,存到Redis,存到加密的cookie中)

二、session源碼解析? ? ?

? ? ? ? ? ? ? 1.先執行Flask的__call__方法 ,調用出來wsgi_app,它先做request的上下文做完,請求剛進來到push中,它先處理request將請求相關的數據,然后添加到了local中,
? ? ? ? ? ? ? ? ?緊接著處理session(將RequestContext對象(request,session)添加到local中),request(將request信息封裝到Request(environ)對象并復制給requestContext 對? ? ? ? ? ? ? ? ? ? ? ?象),然后獲取cookie中的隨機字符串,檢驗是否有,沒有就生成。根據隨機字符串,獲取服務端session保存的值。把session放到內存中,
? ? ? ? ? ? ? ? ?執行wsgi_app方法下面的視圖函數。執行完視圖函數返回到full_dispatch_requesthong ,觸發只執行一次的裝飾器中(觸發Flask信號),
? ? ? ? ? ? ? ? ?執行完這個裝飾器,緊接著執行下面的特殊的裝飾器,如果這些特殊裝飾器沒有返回值,那么rv=None,如果有返回值,頁面時就顯示這個返回值,
? ? ? ? ? ? ? ? ?如果沒有返回值,觸發執行那個視圖函數,拿返回值。請求執行完返回后,調用finalize_request,對它的返回值進行封裝。

如何處理的requestctx = self.request_context(environ)將request信息封裝到Request(environ)對象并復制給requestContext 對象class RequestContext:def __init__(self, app, environ, request=None):self.app = appif request is None:request = app.request_class(environ)self.request = requestself.url_adapter = app.create_url_adapter(self.request)self.flashes = Noneself.session = None如何處理的sessionclass RequestContext:def push(self):將RequestContext對象(request,session)添加到local中_request_ctx_stack.push(self) 剛開始處理session #return app.session _interface.open_session(self,request) #app.session _interface=SecureCookieSessionInterface()self.session = self.app.open_session(self.request)if self.session is None:self.session = self.app.make_null_session()

三、Flask和Django的區別  

? ? ? ? ? ?請求相關的數據

? ? ? ? ? ? ? ? -Django:參數

? ? ? ? ? ? ? ? -Flask:? ? 基于Local,LocalStark對象

? ? ? ? ? ? 多個請求進來會不會混淆

? ? ? ? ? ? ? ? ? -單線程

? ? ? ? ? ? ? ? ? -多線程

? ? ? ? ? ? ? ? ? -協程

? ? ? ? ? ? ? ? ? ? 解決: from greenlet import getcurrent as get_ident

轉載于:https://www.cnblogs.com/moning/p/8455511.html

總結

以上是生活随笔為你收集整理的flask-session总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。