做Python Web開發第一年,我都做了些什麼

2019工作總結——Python開發第一年,我都做了什麼

前言

2019年已經過去,但是卻留下了很多東西,這一年或許並沒有多少成長,但是確實努力了。難得有空閒,寫篇文章,以此來回顧2019的工作。文章總體以時間順序進行,太久沒寫作了,文筆太差,本想寫個總結,結果寫成了流水賬,多多擔待。公司信息不便透露,圖片中雖然都是測試數據但還是打個碼比較好

入職到第一個項目

本人是今年年初找的工作,相信2018年各大互聯網公司裁員的事情大家都有耳聞,這裏就不做過多的說明了。2018年底被辭,年初就到深圳找工作了。

2019年3月7日,我入職了現公司,所處部門是研發和工廠生產的中間部門,就是爲工廠生產提供技術和自動化生產工具。我主要的工作內容是Python Web開發,因爲工廠將要採用自動化生產,因此會產生很多數據,我的主要工作就是搭建一個平臺,收集所有的測試數據,並且進行分析,研究影響產品測試通過率的因素。

編程語言,框架和數據庫的選型。

  • 語言:Python。我使用的主要編程語言是Python,領導也是看中Python的快速開發才找的Python開發人員。
  • 框架:Django。既然是Python,那麼首選自然是DjangoFlask。當時領導提出了一個Odoo,說是基於Django開發的,可以很方便的做各種報表。我是第一次聽說這個東西,然後花了幾天時間看了一下,確實是可以直接生成報表,但是十分複雜,我對自己能力還是有自知之明的,在短時間內肯定無法根據需求定製開發。最後和領導商量後,選擇了Django作爲基礎框架,
  • 數據庫:Mysql。數據庫領導一開始是建議使用MongoDB。MongoDB我確實有過使用經驗,但是考慮到測試數據之間有極強的關聯性,後期的數據分析也會涉及到各種關聯查詢,我沒有絕對的把握,還是決定使用Mysql,畢竟MySql數據庫流行了那麼多年,資料豐富,我對Mysql的查詢語句也比較熟練。

第一個版本

項目是部門內部立的,沒有產品經理,沒有UI,所有內容都是憑着領導幾句話描述的藍圖來自行腦補,再加上自己的一些想法構成。Django的好處我這裏就不說了。使用Django,很快就搭建起了一個項目的雛形,還有完整的後臺管理。但是其實這個項目對前端還是有一定要求的,因爲要展示數據,還有分析之後的結果,那麼肯定不能是幾個簡單的數字就行了。前面也說了,我並不是在技術部,整個部門除了我,其他都是做硬件相關的,這也就意味着我必須自己做前端,當然,在學Django的是有接觸過,也勉強可以做,只是沒有那麼美觀,這個在面試的時候有說過,領導並不介意。

前端方面,肯定不可能完全自己寫的,畢竟我不是專業的前端開發人員,而且現在網上已經有很多現成的框架了,何必要自己造輪子呢。我選擇使用Bootstrap3作爲前端框架,使用Jquery庫簡化js操作,這些之前都有學過,也不算難事,css樣式雖然不熟,但是簡單的應用還是OK的。

  • 登陸頁面。這個是任何網站必備的,登陸頁面就去Bootstrap官網找了一個【極簡風格】的案例,然後自己瞎改一下,成就了下面這個神奇的界面(手動滑稽)登錄頁
  • 主頁。主頁也是找的模板,然後自己改改,整出了下面這個樣子主頁
  • 圖表。網站的主要功能就是數據分析,圖表是一定少不了的。我並沒有使用Python中牛逼轟轟的NumpyPandasMatplotlib,因爲我不會,理由就是這麼簡單粗暴。而且項目緊急,也不會給我時間慢慢去學的。圖表使用的是js庫Echarts來繪製的,後臺將數據處理好之後傳給前端模板,然後通過js繪圖。

至此第一個版本基本就算完成了,現在看起來真的是很簡陋啊!!!
左邊的菜單是剛入職時的原始需求,其實也不多,所有功能都已經實現。我看了下gitlab提交時間,第一個版本的完成時間是2019年4月9日。我是3月7日入職(週四),大概3月11日開始進入開發,用時1個月。

這中間要感謝幾個朋友,幫了不少忙,Echarts就是在他們的推薦和指導下學習使用的。

親手安裝【服務器】並部署項目

第一個版本完成了,但是並沒有投入使用,因爲工廠還沒有準備好,我這邊也只是和自動測試程序調試通過而已,連服務器都還沒有架設,更別提部署了。

公司有技術部,也有機房。我向網絡工程師申請了一臺【服務器】,其實就是個電腦主機,因爲沒有服務器可以供我們部門使用,畢竟也不是技術部的人。電腦配置記不清了,只記得是奔騰雙核處理器,DDR3 1333 8G。網絡工程師把電腦插好線以後就是我自己安裝了。服務器肯定是選擇Linux系統,因爲我比較喜歡Ubuntu,所以安裝了Ubuntu18.04LTS(某.NET程序員說Ubuntu是非常小衆的系統,聽都沒聽說過,咱也不清楚,咱也沒反駁,反正是用了三四年了)。

以前用Ubuntu都是在虛擬機裏面,安裝也是安裝帶圖形化界面的,這次是物理機安裝,還是服務器版本,沒有圖形化界面一時間還真不適應,不過一路也沒遇到什麼障礙,只是到了最後網絡配置的時候,因爲公司機房用的是靜態分配,所以第一次配置沒成功。也是這次安裝,我第一次見到了把子網掩碼寫在IP地址後面的寫法【xxx.xxx.xxx.xxx/24】,本人不是網絡專業,也沒有學到過這種方式,所以一臉懵逼,還是搜索之後才明白的。

服務器安裝好了之後極少去看它,都是直接通過xhell遠程連接過去的,所以我現在也不記得是那一臺了,因爲機房裏面好多主機呀(/笑哭)

服務器搭建好了,就該部署項目了,作爲一個即將用於生產的服務器,肯定不能直接使用Python manage.py runserver來啓動項目。

  • supervisor:項目應該由守護進程來管理,這樣便於服務進程結束後自動重啓,而不至於服務停止,這裏採用了supervisor來對項目進行管理,一旦服務程序被終止,立即會拉起新的進程來提供服務。(本以爲這也算是考慮周到了,沒想到還是漏了一件事:supervisor沒有加入開啓自啓動。項目部署不到兩個月的一個週末,我正在看着美劇,突然接到領導電話,服務器無法連接,我這纔想起來手動開機後,守護進程不會自動啓動,於是馬上坐公交到公司處理去了。我這算是操這着運維的心嗎?)
  • Nginx:Web服務器選用Nignx,網站所有的靜態文件都通過它來處理,Django關閉調試模式後是不會處理靜態文件的。

項目部署完了之後,在內部使用了一段時間,然後找同事申請了一個域名,因爲要外部訪問。


聚沙成塔

第一次版本迭代

第一個版本完成後,貌似已經滿足了當時所有的功能需求,而且沒有新的需求提出,於是我就開始寫文檔了。因爲之前項目特別急,所以沒有什麼文檔留下,第一個版本完成後,領導就安排我補文檔,軟件需求說明書、軟件需求規格文檔、軟件接口文檔等等一堆文檔,我記得有一個星期都是在寫文檔。後來還對程序做了性能測試,然後我自己又寫了一部分單元測試和接口測試腳本。

大概是4月下旬,項目部署一段時間後,新的需求就提出來了,至此開始第一個版本迭代開發工作。主要是增加一些小功能,修改一些之前的bug,然後順便優化一下頁面。之後的V1.1的登錄頁面長這樣,是不是好看多了。登錄

增加了幾個功能,增加了菜單項。主頁

這個版本完成後,已經是5月30號了。

新的工廠小工具,開啓新徵程

大概是五月下旬的時候,因爲產品升級,需要製作一個小工具,部署到工廠服務器上,程序很簡單,就是一個根據指定規則生成序列號的一個服務程序,帶個管理界面而已。

程序很快就開發好了,工廠服務器上因爲有別的項目,所以服務器安裝的是Windows server 2008,第一次在windows服務器上部署項目,找了些教程,不難,就是一堆坑。

  • Apache:Web服務器,windows上部署都推薦使用這個,我也就跟着教程來咯。
  • 守護進程:windows通過註冊服務設置開啓自啓動來實現開機自啓動

部署過程中出現了一些問題,需要修改python庫文件中的內容才能正常使用,主要是因爲windows有些機制和linux不一樣,導致在windows下運行的時候報錯。

部署不難,一勞永逸,難的是後面的維護,公司結構比較複雜,有三個工廠,每個工廠都要部署一個,還有公司內部測試用的,以至於後面每次有升級變更,都要遠程登錄到各個工廠去一一維護,遠程方式還不一樣,有的是windows遠程連接,有的是teamviewer,有的是向日葵遠程,後期的維護是真困難。從此開起來運維身份,前前後後加起來已經有5個服務器在運行項目了,都要進行管理。

使用阿里雲服務器

時間來到6月,由於公司頻繁出現斷電,物業斷電等問題,導致工廠測試經常無法連接到服務器,爲了確保服務器的穩定性,決定使用雲服務器代替本地服務器。於是將項目遷移到雲服務器上,公司的本地服務器成了內部測試的服務器,也要管理,後來在上面部署了Odoo項目,現在管理6個了。

6月份開發量較小,都是些小功能,界面顯示優化,bug修復,文件管理等常規維護開發,再從數據庫導點數據出來,看看工廠服務器的運行狀態等等。期間有空,學習了一下前端技術。因爲無意間看到一個大數據展示的圖,一時興起,就找了一個模板,自己仿了一個,就是下面這個。完全是自己用一行一行代碼手敲出來的的,當時可把我牛逼壞了(嘻嘻~)
在這裏插入圖片描述

遍地開花

爲工廠定製專屬模塊

7月份,接到工廠需求,要掃碼統計數量,還要做看板,於是根據提出的需求,做了一個看板,如下。看着還行吧,還有些細節沒處理好,勉強可以看看。
在這裏插入圖片描述
在這裏插入圖片描述
由於工廠時常出現一些不規範的操作導致測試數據丟失,領導最終決定要把雲端的服務程序下發到各個工廠,確保數據百分百可追溯,再順便接過一個原本由其他部門管理的負責對接APP服務器的工具。從這裏開始項目就一分爲二,工廠端強調數據安全性,和對接APP服務器,雲端的總服務器負責數據分析和工程文件管理,各有所長,但是工廠的數據是必須要發送到總部的。

工廠版本的服務程序因爲要對接一堆APP服務器,測試時數據上傳時會有延遲的情況,爲了不阻塞主程序,在工廠段端是用來Celery任務來發送數據,只有當程序執行到發送任務的時候就會被丟到隊列中去執行。在windows下使用任務隊列時會開啓一個控制檯,且不能關閉,而且無法以後臺程序運行,這點很坑,需要使用一個工具,將啓動任務隊列的命令註冊爲系統服務才能達到效果。

完成這些工作已經是9月份,期間堅經常在多個工廠服務器之間切換,深感能力不足,應該有統一管理的方案,也有去了解docker和自動構建部署的內容,但是還沒來得及學完又被其他事情耽擱了。

兼職前端開發

正當我在學習docker的時候,內部又立了個新項目,準備整合公司各個部門的數據,找了三個部門的的3個程序員參會,計劃已經有了,只需各個部門配合即可,但是關鍵缺少一個前端,三個程序員都是後臺開發,只有技術部有一個前端,但是沒有時間,多次開會討論,最後我承接了前端的開發任務。只有一個頁面,但是我搞了一個多星期才寫完,頁面裏的圖表細節配置較多,需要一一查手冊。最後就是下面這個樣子。
在這裏插入圖片描述
這個項目結項已經十月中旬了

使用Vue開發

自從工廠和總部的服務器分離後,總部的服務器基本上除了導出數據沒有什麼操作。10月底開始學習了Vue後,便萌生了重構前端的想法。11月初開始準備重構前端,想着憑藉vue雙向數據綁定的便利,應該可以在一個月完成,計劃在2020年的時候可以用全新的界面來迎接新年,但是沒有完成。中間改了一些後臺,又花了一個多星期的時間爲工廠開發了一個小工具,準備用於標籤打印。最後用時兩個星期,證明了一件事,瀏覽器不適合,標籤打印機不同於普通打印機,用前端打印出來的額效果顆粒感太嚴重,最後還是由同事用C#開發了一個客戶端工具實現打印功能,我寫的服務只有接口能用上。

從2019年11月初到2020年1月10號,歷時兩個月對前端進重構。新的前端使用Vue全家桶 + ElementUI開發,效果還算可以
在重構前端的時候,也發現了後臺的一些不足,有很大一部分是之前的能力不足遺留的,雖然功能正常,但是代碼不夠優美,都是很原始的思路,於是又花了幾天時間用djangorestframework把後臺大部分都重寫了一遍。以前的項目是由django去渲染前端模板,現在已經是前後端分離,代碼看起來比以前美觀了很多,而且還支持手機端顯示。最後的效果如下,看看是不是比之前的版本美觀了很多。
vue首頁
user
在這裏插入圖片描述
在這裏插入圖片描述

總結

  • 2019年最明顯的進步就是前端開發能力了,從最初的拼命寫css到最後幾乎不寫css反而達到了更好的顯示效果。從Django渲染到使用vue完成前後端分離,也算是一種進步吧。
  • 後端開發有一些進步,但是明顯不夠,心心念唸的算法、dockerElasticsearch一直沒學,Python還有一堆有趣的三方庫在等着我,只能2020加油啦。
  • 對於程序員來說自我能力的提升非常重要,堅決不做五年開發經驗,一年實習水平的程序員。
  • 現在看入職時寫的代碼,我都想抽自己兩耳光。
  • 2019更像是一顆螺絲釘,哪裏需要就往哪裏擰

2019感覺很累,我以爲我每晚看視頻敲代碼到1點半就算努力了,但是看着公交車上拿着手機看老師敲代碼的程序員,他們比我更努力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章