系統使用先後端分離的模式,前端使用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)vue
獲取到所選課程的id和價格策略id傳到後端,
在後端獲取,根據課程id獲取到當前課程,根據當前前課程全部的價格策略,
判斷在後端獲取到的價格策略id在不在當前課程的價格策略中,
不在的話則拋出異常價格策略不存在,在的話繼續執行。
將該課程全部價格策略的id,時間週期和價格存放到列表中(price_policy_list)中。
繼續將該課程的:課程id,課程圖片地址,課程標題,
全部價格策略,默認價格策略封裝在字典(course_dict)中。
判斷當前用戶的購物車中是否有東西,沒有的話則把當前課程放入到購物車中,
若是購物車中已經有課程課程,則將該課程添加到購物車中,最後封裝好放到redis中。redis
三:修改購物車總的價格策略(patch):
若是要修改購物車的總價格策略:向後臺發課程id和要修改成的價格策略id,
判斷課程是否在購物車中,判斷傳遞過來的價格策略是否在當前課程的價格策略中,
在的話將 redis中的當前課程的默認價格策略修改成當前的價格策略。
去結算:
獲取用戶提交的課程id, 判斷是否選擇要結算的課程,沒選擇則拋出異常。
檢測購物車中是否已經有課程(應該有課程的)。
檢測購物車中是否有用戶要購買的課程
若是所結算的課程在購物車中,
獲取選中價格策略的價格詳細,
選擇購物車中當前課程下的全部價格策略以及相等的價格策略,獲取其信息,
獲取當前用戶全部的優惠券,
區分用戶的優惠券種類,課程優惠券添加到課程中;全局優惠券添加到全局,
循環遍歷當前用戶的全部優惠券,判斷他們是否過時,
若是沒過時,判斷他們是全局優惠券仍是針對某個課程的優惠券,
區分好是什麼優惠券,後面區分該優惠券是什麼類型,
是通用券,仍是滿減券,折扣券,全局優惠券,
針對不一樣的優惠卷,最後將全部數據封裝放到redis上。數據庫
去支付:
1.去結算中心獲取要結算的全部課程和優惠券,
2.循環遍歷每個課程,
開始總價格和折扣價都爲0,
若是該課程沒有使用優惠券,則支付價格=課程原價,折扣價=0,
3.若是使用了優惠券,則須要去判斷所使用的優惠券是否已通過期,
或是否已經被使用,若是過時了或者被使用了就拋出異常,
不然繼續往下執行,判斷該優惠券的類型.
3.判斷優惠卷類型計算出相應的折扣。支付總價=商品總價 - 折扣
4.獲取當前用戶的貝里,獲取總價。判斷貝里是否能全額支付。
6.點擊當即支付之後, 進行數據庫操做,生成訂單。django
生成訂單:
點擊當即支付,生成訂單,訂單根據前面支付是否等於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__方法實現的自定義驗證規則
api