1. 程式人生 > >AI學習吧

AI學習吧

一:AI學習吧

專案描述

系統使用前後端分離的模式,前端使用vue框架,後端使用restframework實現。

 

專案需求

公司開發AI學習吧,由於公司需要一款線上學習平臺,要開發具有線上視訊學習、支付等功能的平臺,並整合使用者支付和微信訊息的推送和提醒。使用Git進行協同開發。

 

專案結構

專案主要有三大模組:
專案三大模組:
1:導師後臺是:基於Thanos元件,給導師"管理學員作業""學習進度""跟進記錄"等。
2:管理後臺:基於Thanos元件,給運營使用:"上傳視訊""寫文章""優惠券的發放"、辦理"退款
""休學"等業務。 3:主站(基於Vue+Django restful framework框架):

 

 

個人負責

我主要負責主站後端的開發。

主站主要有分為五大模組:
第一個模組是課程:主要包括:課程大類和子類兩種,分別有學位課程和普通課程兩種,
區別在於學位課程除了包含普通課程的優惠卷和價格策略
還包含學位獎學金和分配相應的導師進行一對一的跟進輔導。
除此之外還有:
"課程列表""課程詳細""課程章節","課程目錄""看視訊""評論"。
第二個模組是深科技:是基於restful將資料序列化,基於restful api規範的不同請求方式
來實現響應的功能,
如使用get方法檢視”文章
",post方法實現"點贊""收藏""評論"等功能。 使用option實現複雜請求 解決跨域問題。 第三個是購物車:提交請求獲取當前課程資訊,價格策略等資訊並寫入redis實現加入購物車, 有兩種支付方式:跳轉到支付頁面立即支付,使用者進入購物車點選去結算, 從redis獲取相應資訊,點選去結算,獲取商品價格策略, 獲取當前使用者的優惠卷,貝里,判斷是否過期,判斷優惠卷型別,進行相應的折扣, 點選立即支付,生成訂單,判斷狀態是否支付成功,支付成功清空購物車,也就redis 中的相應商品資訊,最後是基於關注公司微信公眾號實現的微信訊息推送。 然後是個人中心: 基於restful獲取資料,將資料序列化。主要包括
"我的賬戶","我的訂單", "我的收藏","個人資料","賬號安全"。 最後一個模組就是一些:”關於我們“,”聯絡我們“,”商務合作等“。

 

主要功能

大多數只是根據前端需求,獲取資料,序列化返回。
1. 自定義rest認證token 認證。
2. 序列化以及自定義驗證對請求資料合法性進行校驗和認證。
3. API訪問的介面速率限制。
4. 課程優惠券,通用優惠券,視訊點贊,點踩,收藏,更換頭像,上傳作業,評論等。
5. 支付寶支付/微信支付。
6. 微信開發,針對關注微信公眾號,實現對學位課程報名的使用者作業獎懲和導師的跟進獎懲。

 

技術問答

問題:rst是如何獲取前端資料的?
答:request.data.get('xxx')

問題:如何序列化的?
答:Django-rest-framework的序列化。

問題:購物車是如何如何實現的?
答:1:當用戶選擇需要購買的課程和價格策略後,有兩種方式購買課程:


一:直接購買,將課程id和選擇的價格策略放到redis中,
跳到去支付頁面,從redis中獲取購買課程的id和價格策略id,
如果該使用者要使用優惠券和貝利,則選擇當前使用者所擁有並且未使用和沒過期的優惠券,
得到折後價格,點選去支付完成支付,刪除購物車資訊,生成訂單,儲存到資料庫。
二:新增到購物車中完成支付(post)


獲取到所選課程的id和價格策略id傳到後端,
在後端獲取,根據課程id獲取到當前課程,根據當前前課程所有的價格策略,
判斷在後端獲取到的價格策略id在不在當前課程的價格策略中,
不在的話則丟擲異常價格策略不存在,在的話繼續執行。
將該課程所有價格策略的id,時間週期和價格存放到列表中(price_policy_list)中。
繼續將該課程的:課程id,課程圖片地址,課程標題,
所有價格策略,預設價格策略封裝在字典(course_dict)中。
判斷當前使用者的購物車中是否有東西,沒有的話則把當前課程放入到購物車中,
如果購物車中已經有課程課程,則將該課程新增到購物車中,最後封裝好放到redis中。


三:修改購物車總的價格策略(patch):
如果要修改購物車的總價格策略:向後臺發課程id和要修改為的價格策略id,
判斷課程是否在購物車中,判斷傳遞過來的價格策略是否在當前課程的價格策略中,
在的話將 redis中的當前課程的預設價格策略修改為當前的價格策略。
去結算:
獲取使用者提交的課程id, 判斷是否選擇要結算的課程,沒選擇則丟擲異常。
檢測購物車中是否已經有課程(應該有課程的)。
檢測購物車中是否有使用者要購買的課程
如果所結算的課程在購物車中,
獲取選中價格策略的價格詳細,
選擇購物車中當前課程下的所有價格策略以及相等的價格策略,獲取其資訊,
獲取當前使用者所有的優惠券,
區分使用者的優惠券種類,課程優惠券新增到課程中;全域性優惠券新增到全域性,
迴圈遍歷當前使用者的所有優惠券,判斷他們是否過期,
如果沒過期,判斷他們是全域性優惠券還是針對某個課程的優惠券,
區分好是什麼優惠券,後面區分該優惠券是什麼型別,
是通用券,還是滿減券,折扣券,全域性優惠券,
針對不同的優惠卷,最後將所有資料封裝放到redis上。


去支付:
1.去結算中心獲取要結算的所有課程和優惠券,
2.迴圈遍歷每一個課程,
開始總價格和折扣價都為0,
如果該課程沒有使用優惠券,則支付價格=課程原價,折扣價=0,
3.如果使用了優惠券,則需要去判斷所使用的優惠券是否已經過期,
或是否已經被使用,如果過期了或者被使用了就丟擲異常,
否則繼續往下執行,判斷該優惠券的型別.
3.判斷優惠卷型別計算出相應的折扣。支付總價=商品總價 - 折扣
4.獲取當前使用者的貝里,獲取總價。判斷貝里是否能全額支付。
6.點選立即支付以後, 進行資料庫操作,生成訂單。


生成訂單:
點選立即支付,生成訂單,訂單根據前面支付是否等於0來判斷支付狀態:已支付或者待支付;
生成訂單詳情,迴圈課程資訊,寫入課程的原價,折後價,支付價,視訊的有效期即訂單的有效期,
對優惠券進行處理,把該使用者已使用的優惠券狀態改為已使用;
修改貝里,該賬戶的貝里減去使用的貝里,並更新貝里消費記錄表,
顯示賬戶的消費金額,賬戶的餘額等。
最後刪除購物車中的資訊,即redis中的購物車資訊。

問題:你們專案總共多少張表,多少行?
答:48張表,是我參加專案表最多的一次,光表就有1005行。

問題:說幾張你熟悉的表?
課程相關:課程大類,課程子類,學位課程,普通課程,課程詳細,課程大綱,課程章節,課時目錄,常見問題等
深科技相關:文章來源,文章資訊,文章點贊,文章收藏,文章評論。
使用者相關:使用者表,使用者Token表。
購物車相關:購物車是基於Redis實現的。
還有:優惠卷生成規則表,價格與有課程效期表等等。

問題:專案是幾個人負責的?
答:後端主要兩個人,我寫主站,還有一個寫後臺管理。

問題:你在開發中遇到的坑有那些?
答:坑到沒有什麼,涉及的技術也不是特別難,在做購物車和立即支付的時候,業務邏輯比較複雜,
因為其中涉及到價格策略,優惠卷,我們自己的貝里。

問題:CORS?
答:前端問我,最開始聽說過,不太熟悉,就瞭解了一下
概述:

問題:如何連線redis的?
答:
POOL=redis.ConnectionPool(host='192.168.20.58',port=6379)
conn=redis.Redis(connection_pool=POOL)

問題:自定義rest認證token 認證是如何實現的?
答:自定義token認證。客戶端傳遞過來的token等引數進行身份驗證。
通過rest framework為我們提供的認證機制去驗證,每一類繼承BaseAuthention,裡面實現了一個authtent方法,
獲取使用者傳過來的token,看傳過來的token是否和資料庫的一致,一致驗證通過,不一致,說明是無效token.

問題:API介面的速率限制是如何實現的?
答:針對匿名使用者和登入使用者加以區分,登入使用者記錄它的name,匿名使用者記錄它的IP。
我們專案中又判斷了一下是否是管理員,根據使用者型別的不同,來判定不同的限流策略。
建立一個類繼承BaseThrethe,寫一個allow_request和wuit方法限制訪問。

問題:做一個專案你都用了哪些技術點
像是慧聰學習系統,我們寫後端的時候就是用restformwork來做的,返回資料的時候
是基於序列化來實現的。用methodSerialize直接從資料庫中查到響應的值返回,
類似於django中的ModelForm。
參考restfulwork原始碼實現的認證功能,還可以基於__call__方法實現的自定義驗證規則