1. 程式人生 > >AI學習吧專案總結-年底彙總

AI學習吧專案總結-年底彙總

 

專案簡介

做完這個專案,自己也做了測試,功能是正常可以使用的,暫時還沒有上線,這個專案是用來賣課的,我自己做的是各個種類課程的展示,登入認證,還有各個介面,
還有支付環節,還有微信推送訊息,加入他們要買這個平臺課程,我們就要給他推送訊息,還有一些活動給他推送訊息。 專案週期 這個專案,是從今年5月份開始表結構設計的,這個過程我也有參與,因為我們後臺開發總共3個人,表結構設計就用了一個半月,我自己做的這些功能,
總共一個半月,但是做出來bug比較多,到我走的時候這個已經很完善了,基本在線上模擬已經可以了 購物車實現 我們前端用vue,我做的資料介面,她在頁面點選,我就給他傳送資料,我要的資料是一個課程id和使用者id,肯定是使用者登入之後才可以買,所以主要是這倆資料,
他只有通過了驗證才可以買課程。 驗證的實現
--主要使用drf的auth元件,本來說要使用session,但我們前端意思是要一個隨機字串就行了,於是我使用了自定義的token,
就是當用戶第一次登陸我就在資料庫建立個字串token,如果他已經登陸了,我就在資料庫中更新這個字串,使用的模組裡的update_or_create這個,
我時新建了一個usertoken表,因為每次使用者訪問都會使用token,於是我就將uer表和usertoken表分開了,為了給資料庫釋放一些壓力,加入不分開,
每次訪問都得從資料庫中找token,頭像,使用者名稱之類的一堆東西,效率慢,所以我新建了一個usertoken表,提高效率,減少資料庫的連線次數。 繼續,購買時,主要就是獲取使用者id,和課程id,我之前想著將資料加入mysql中,但是一想著,有的使用者可能將商品加入到購物車而不買,有可能就給刪了,
感覺就沒必要一直把這些放到資料庫中,於是就想到了redis,基於快取儲存,訪問資料速度也快,這樣既然使用者花錢了,速度肯定越快越好,
給人家的體驗也就得好。當時我在redis存資料時,坑比較多,當時設計的資料結構,套了一大堆字典,什麼user_id一個大字典,裡邊課程id,裡邊課程的頭像,
課程名稱,價格策略之類的,一層套一層,但是,我發現我的頁面要展示這些東西,在這個結構中查特麻煩,因為redis中村的都是位元組串,
我把每一層字典迴圈出來後都要做dump,load,那麼多層字典,很麻煩,我就想了很久,最後設計了一層,解決了這個問題,我只設計了一層,
鍵時shopping_car_userid_courseid,就這一個鍵對應整體的資料,裡邊就是課程圖片,課程名字,課程價格,價格策略,在頁面展示時就展示這些,
還有一個預設價格策略,因為價格策略在前端做的是一個select標籤,select就是她存的價格策略可以隨時改,我就把這個商品的所有價格策略都查詢了出來,
我感覺這個價格策略做的很成功,買課時,我把一個課程分為了好幾個價格策略,有前一個月免費,第二個月收費200,第三個月300,以後再想看的話就交全款,
誒,給人一看,這個課程還是免費了,如果他很想了解這個東西,肯定會點進去看,課程很好的話,他肯定也會付第二個月的前的。
這是我們產品經理給我們說的策略,我們設計表結構時就這樣設計的,我就感覺這個挺牛逼!!展示到頁面感覺也挺好的 學習計劃 之前做的web方向,接下來想往人工智慧方向發展 框架 我熟悉djanog,flask,當時我覺得這個flask比較牛逼,三行就可以開個web服務,後來瞭解到flask上下文管理,研究了上下文管理原始碼,都是要儲存資訊,
django是網request中存資訊,django是每個檢視函式都有個request,t他是每一層都會把那個request傳遞下去,從我的wsgi,到我的中介軟體,
到我的檢視函式,都是一直傳遞下去,但是flask不一樣,當你用是,你會發現檢視函式並沒有request,他是從flask的包中匯入的request,
我就想floask是多執行緒的,當很多個使用者訪問,他是如何把每個使用者區分開來的,後來我發現一個類似於surrounding_local,
他比surrounding_local更加強大,也就是維護了一個字典,他可以用哪個執行緒id和協程id給區分開,把不同請求的request給封裝到裡邊,
原始碼哪個應該是local_stack物件,他裡邊用的local好像是,他的流程就是,當請求來了,他就封裝倆個物件,一個叫ctx,reqeust_comment物件,
還有一個物件時httpctx物件,,,他就不同於django請求,django的請求是一層套一層,ctx這個物件裡邊封裝了request和session,
httpctx也封裝兩個物件,一個是全域性的一個g,一個是appcurrent,一共就這四個物件,當請求來的時候,他把這倆個大物件分開,存到時候,
根據執行緒id,一個存在了local_stack中的local物件中,當。。。 這種框架本質上就是一個客戶端,一個服務端麼,不管怎麼寫,他的本質上肯定封裝了socket。