自家公司訂貨後台
時間
我用到的東西
在幫忙家裡訂貨時,發現經常需要再三反覆和人溝通,或是一直做重複的事情。所以打算寫一個能夠及時更新,自動計算成本外,還能通知櫃檯人員收貨的後台系統。
我不知道後端框架能做到什麼?
我利用mozilla的Django教學。慢慢理解其所提供的功能,建立了一個圖書管理系統,規劃書籍的資料欄位、顯示藏書的內容及篩選、利用表單更動還書日期、區分管理者及一般讀者其觀看到的內容、測試程式運作符合預期。 用freecodecamp的課程學習SQL及postgreSQL。
我要怎麼部署?
「要是好不容易大功告成才發現無法部署該怎麼辦?」抱持著這樣的擔心,我確定Django可以完全我想要的顯示最新的訂單資料後,我決定先學習部署Django。 我先試著把最初始Django專案放到digitalocean中,依照教學設定Python虛擬環境和處理靜態資料,了解gunicorn(web server和Django溝通的橋樑)、nginx(web server)和其設定,最後再處理domain的DNS和SSL憑證。接著再部署前述提到的圖書管理系統加深印象,確保理解了部署的流程。 最後在部署自家公司後台的時候,架構比前面兩個專案複雜了一點,不過有了前面兩次的經驗,讓我更能心平氣和、冷靜的排除問題,最後成功部署。
規劃資料庫時不確定要放入什麼樣的資訊
理解Django的基礎功能後,開始列出可能會使用到的各種情境,思考哪些是需要的資料欄位。 可能是因為初次規劃,我不是很確定哪些欄位是必要的,同時擔心欄位是冗贅的或是否有更好的存放方式,因為這樣煩惱了不少天,後來我決定先按自己的想法做,先求有再求好吧! 因為我一直覺得資料庫規劃後再更改會很麻煩,這確實是事實,第一次更動資料庫架構時還忘記會因此改動到原本的資料,有這經驗讓我後來在變動時較為小心,會在正式更動前想好該如何處理原資料,也因此練習了幾次SQL。
將過去資料從Excel轉到資料庫
為了將資料轉移,我依據資料庫格式,把Excel訂單細節切割成不同的資料表,再轉為CSV檔,不過利用軟體匯入時一直出錯,可是沒有清楚表示問題是什麼,讓我相當困惑。 我改用Python自行將CSV匯入資料庫,這樣能逐行檢查匯入的情況,也可以揪出有問題的資料是哪一行,進而確認問題。 還發現匯入的軟體把應為null的數字欄位匯成空字串,我另外找出所有該是數值卻被填成空字串的欄位,將他們轉換成null,最後才順利將過往資料都匯入。
與Line連動
有些資料只想讓需要的人看到,為了讓長輩不用再多記一個帳號密碼(他們經常哀嚎忘記密碼),我打算讓長輩們使用Line來驗證身份。 只是在閱讀文件和理解OAuth流程時就卡關了,總是看不懂各個角色-尤其是我-要負責的事情,看了好幾遍才明白大致上的流程。 在用Line登入時,我是使用套件完成的,確認可以運作和實際執行的流程。之後詢問櫃台人員後,我決定寫Line notify來通知櫃檯人員收貨,因為流程與Line login相似且功能更單純,這次就自己動手寫了當Line導回redirect uri時要做的行動,利用傳回的值,再發送requests去取得token,依據token取得用戶名稱並儲存。
嘗試使用測試驅動開發
我在不牽扯到第三方的功能上盡量使用測試驅動開發,例如在填寫完必要的資訊後,就會自動計算成本、有權限的用戶才能看到指定內容等,先寫出想像中使用者的行為,在開始撰寫真正的程式碼,讓測試可以成功。 本來覺得很花費時間,開發時才發現其實是在節省時間,因為通常寫完一個功能我會自己手動測試,用測試可以省下人工測試的時間。在每次寫完功能時,執行從古至今寫過的測試相較於手動測試,快速非常多,而且不會浪費。有些自認為沒有關連的功能竟然會互相影響,也多虧測試,一下就能發現問題。
這是我第一次真正實踐腦中的構想,接觸到後端、資料庫,並且真的能在線上操作、展示資料,我難以言喻心中的感動和滿足的成就感。在寫的過程也一直想著還要改進、增添功能,不斷評估、拉扯該以哪些功能為先,彷彿回到UI時期。我還有很多想了解的、等著我學的知識,可是無論如何,我終於跨出了我的第一步。