python 實戰 「唱啥」app後台開發

2021-09-30 13:54:12 字數 1825 閱讀 3239

專案背景

由於開發時間比較緊張,python**開發效率高,可讀性強,適合本次周期短人員多的現實情況,所以 後台開發語言選用的python,另外,後台框架選用的是flask,它是乙個python實現的web開發框架,簡單易學,它的文件和擴充套件性都強於django和tornado,故後台開發框架選用flask,整個專案框架如下:

我們後台的整個邏輯流程如下:

後台收到前端的post請求,從請求內容中拿到使用者id(qq號)和使用者輸入的音訊,儲存到本地,去呼叫最外層介面,最外層介面直接返回最終結果再構建前端要求的json,返回給前端。

演算法部分我們組有專門做演算法的大佬,我們只需要傳參去呼叫他的介面。主要邏輯是:根據使用者的一段清唱分析出與其聲音最相似的三個歌手,再根據使用者聽歌行為為他進行推薦,推薦結果由每個歌手的兩首歌組成,雙重保證使得推薦更精確,且跟符合使用者期望,對使用者聽歌行為的分析一定程度上使得推薦出來的歌是使用者比較熟悉和喜歡的歌曲。在最後呈現給使用者的是適合他唱的且他比較喜歡的6首歌。

考慮到異常分支,當使用者輸入的qq號(使用者id)不在查詢範圍內時,按照和其聲音相似歌手的歌曲的熱度為其推薦。

除此之外,後台**也引入了日誌,在服務執行過程中,記錄異常資訊,方便後期維護。日誌模組規定使用python原生的日誌系統,準確記錄發生異常的時間段等資訊。

介面介紹

1、最外層介面

get_recommend_list (user_id, voice_file)

函式名引數

返回說明

get_recommend_list

使用者id、使用者音訊檔案

使用者json格式的歌曲推薦列表

最外層介面,和前端發生資料傳輸

2、內部介面

函式名引數

返回說明

get_recommend

使用者id、使用者特徵向量、歌手id

字典,key為歌手id,value為list,分別是兩首歌曲的id

結合使用者行為推薦

get_hot_songs

歌手id

該歌手的兩首熱門歌曲

在使用者id無效時使用

get_song_info

空歌曲的所有資訊

乙個大的字典,將檔案中的資訊載入到快取,減少io次數

get_user_factors

空使用者的特徵向量

讀取使用者特徵向量檔案,載入到快取

get_recommend_json

歌手id、歌曲id、歌曲id、相似百分比

乙個歌手的資訊字典

用於返回給前端時構建格式

get_candidates

歌手id

歌手的所有歌曲的特徵向量

返回結果作為引數傳給演算法

結構如下:

通過這個專案學到了很多東西,是對剛學習的python的一種應用,鍛鍊了團隊合作和溝通的能力,把乙個ideal變成產品,這個過程十分艱辛卻也十分美好,我們遇到了,例如前端發過來的音訊無法解析,音訊分析演算法呼叫不成功等等很多問題,但是在大家的共同努力下都能一一解決掉,鍛鍊了解決問題的能力,也有做的不夠好的地方,後台沒有考慮安全性、容災處理、負載均衡這些方面,所以產品的完成度還不能說是很好,但是很感謝能有這麼乙個機會去做這個專案,不僅僅是做專案,更重要的是認識了好多小夥伴,每個人都很努力在做,認識他們很榮幸。

Flutter從入門到高階實戰攜程網App 彙總貼

賈鵬輝的技術部落格官網 包管理的 掘金上放出來的 1 1 課程導學 1 2 專案需求分析,技術分解.2 1 本章作業 2 2 開發系統與工具選擇 2 3 flutter開發環境與ios開發環境設定 mac 2 4 android開發環境設定與flutter外掛程式安裝 mac 2 5 flutter...

python程式設計獅 python程式設計獅app

軟體介紹 軟體功能 零基礎 初學者無門檻,快速掌握。海量教程 提供python程式設計海量參考教程。碎片時間 碎片化時間學習,每天30分鐘輕鬆入門python。移動學習 手機端寫 隨時隨地輕鬆學習。python微課 看 學 練,遊戲化訓練技能。軟體特色 1.使用者需要登入自己的賬號來登入後台,沒有賬...

python函式都有啥 Python函式及其引數

定義函式def def myfirstfunction print 第乙個函式 myfirstfunction 第乙個函式 函式的引數 def mysecondfunction name print name iloveyou mysecondfunction wc wciloveyou def a...