關于我們
書單推薦
新書推薦
|
Python 3自動化軟件發(fā)布系統(tǒng) -Django 2實戰(zhàn) 本書以*的Python 3.6以上版本為編程語言,以Django 2.1以上版本為Web框架,通過一步一步詳細講解,實現(xiàn)一個自動化軟件部署系統(tǒng),并將所有代碼開源托管在Github網(wǎng)站上。 書中不但講解了Python的基礎知識、Django的模型、視圖、模板之間的關系,而且還通過實戰(zhàn)項目,介紹了Django Rest Framework(DRF)的開發(fā)步驟、Django Channels實現(xiàn)Websocket的編程技巧,以及Django TestCase、Mock等測試用例的編寫。 除此之外,對于IT公司在DevOps轉(zhuǎn)型過程中涉及的GitLab、Jenkins、SaltStack等CI/CD工具的安裝配置,以及自動化軟件部署系統(tǒng)與之進行交互的API,都有較深入的講解。 本書適合運維研發(fā)領域的人員,或是有一定Python基礎但又想深入學習Python Web開發(fā)的廣大IT人員閱讀參考。 作者提供大量圖表便于讀者理解,書中的實戰(zhàn)項目能夠快速了解開發(fā),適合基礎和想深入學習的讀者。 Django第三方模板使用:這方面的知識,主要涉及的是Django REST Framework和Django Channels。一個講REST API開發(fā),一個講WebSocket實時應用,都是現(xiàn)代Web開發(fā)不得不會的技能。在講解這些知識時,以筆者個人的學習經(jīng)歷來看,單純地講解,或是簡單地介紹示例代碼,都不會讓讀者能有多深的理解。所以,我們將結合具體的自動化部署系統(tǒng)代碼,把這兩者的應用講明白。 自動化軟件部署系統(tǒng):作為本書的主線,這部分內(nèi)容是絕對要作為重點講解的,不但會在每章說明設計的思路,還會有代碼段詳細講解主要代碼的作用,以及每個功能設計完成之后都有對應的網(wǎng)頁截圖。書中貼的代碼段都有Github上對應的文件名稱,并且附有行號。應特別注意的是,因為書中有的代碼段是選取Github上文件中的代碼片段,所以行號主要是作為代碼解釋之用,并不對應于真正的文件行號。一定要特別注意這個規(guī)則!另外,自動化軟件部署系統(tǒng)的前端UI,我們選用的是網(wǎng)上免費開源的Hui的管理框架,這部分內(nèi)容放在附錄里單獨講解。 CI/CD的工具:這是我們自動化部署系統(tǒng)的周邊配套工具,主要包括GitLab、Jenkins、SaltStack三個工具。沒有這些工具,我們的系統(tǒng)就跑不起來。而沒有自動化系統(tǒng),這些工具卻可以通過手工操作實現(xiàn)。所以,這部分內(nèi)容,也是作為一個運維研發(fā)人員必須要熟悉的(但運維研發(fā)不需要對這些工具做日常運維和功能管理,這原則上是同部門其他同事的職責)。我們對這部分內(nèi)容,會講解其安裝、配置、日常管理。同時,由于我們的自動化部署系統(tǒng)需要對接這些工具的API接口,所以,對于這三個工具的API也會做系統(tǒng)調(diào)用范圍內(nèi)的講解。 本書內(nèi)容 第1章:首先以簡短完整的示例代碼,從Python基本數(shù)據(jù)類型開始,系統(tǒng)地講解了Python這種編程語言中的數(shù)據(jù)類型、順序、分支選擇語句、循環(huán)語句。然后,對函數(shù)的類的知識也做了梳理。因為自動化軟件部署系統(tǒng)中使用了線程池,所以在本章,進程池和線程池的并發(fā)編程也會涉及到。本章接下來講解的內(nèi)容,就是Python的模板化及測試方面的內(nèi)容。這也是我們寫代碼時必須要了解的。需要說明的是,本書除了在第1章講解Python的測試內(nèi)容外,還比較全面地講解了Django的測試。Django部分的測試內(nèi)容,沒有單獨成章節(jié),而是作為一些章節(jié)的補充,放置于最后面。Model測試、View測試、Form測試、Mock測試、API測試、Channels連接測試,這些測試用例,都會講解到。 第2章:從本章開始,重點講Django這個Web開發(fā)框架的內(nèi)容,包括后面的自動化軟件部署系統(tǒng),也是在Django框架基礎之上實現(xiàn)的。在本章中,先講解了關于Web和HTTP協(xié)議的常識,HTML、CSS、JS代碼的作用;之后,在Web開發(fā)中引入Django介紹。在介紹Django框架時,以循序漸進的方式,逐步引入Django的視圖、URL路由、模板和模型數(shù)據(jù)庫的學習。這個學習過程,不是一下就全部推向讀者,而是進行了知識點隔離,在進行前面知識講解的同時,不會涉及后面知識點的內(nèi)容。這種講解方法,我們認為是一種更有效的學習方式。在了解了Django的主要知識之后,本章還會介紹Django的表單及開箱即用的后臺管理界面,這些知識,可以讓讀者更快速、更規(guī)范地進行Django的Web開發(fā)。 第3章:本章主要介紹自動化軟件部署系統(tǒng)的工作流,它也是一種Devops的運作流程。有了這個流程模型,在進行后面的代碼編寫時,才能既見樹木,又見森林。在本章開始,寫了幾個簡單的開發(fā)示例代碼(主要是Java),并進行了經(jīng)典的編譯打包和部署操作。這個手工操作的過程,會在后面用自動化的方法來實現(xiàn)。在有了示例代碼之后,本章接著講解如何將示例代碼使用GitLab來管理源代碼,使用Jenkins來自動編譯源代碼生成軟件包,使用SaltStack來遠程拉取軟件包并進行啟停部署。本章最后,還講解了GitLab及Jenkins的主要API接口,這些接口,我們會在后面的開發(fā)時,使用第三方功能模塊進行配置和調(diào)用。 第4章:從本章開始,正式進入軟件自動化部署系統(tǒng)的實戰(zhàn)開發(fā)。在本章中,我們規(guī)劃好此項目的目錄結構,使用Django命令建好相關的App應用,實現(xiàn)全面數(shù)據(jù)庫的設計。在設計每個數(shù)據(jù)表時,都會講解這個數(shù)據(jù)表的作用、每個字段的意義。更重要的是,再結合第2章的知識點,使用Django orm為每個數(shù)據(jù)表生成一批模擬數(shù)據(jù)。有了這些數(shù)據(jù),就可以更深入地理解orm技巧,更深入地理解部署系統(tǒng)數(shù)據(jù)庫,并且后面開發(fā)的每一個UI網(wǎng)頁,都有充足的演示數(shù)據(jù)。 第5章:本章講解從代碼上實現(xiàn)自動化用戶管理功能。其主要功能是用戶的注冊、登錄、退出、修改密碼和郵箱、忘記密碼時的找回、登錄時的驗證碼實現(xiàn)等。由于這些內(nèi)容涉及了前端和后端開發(fā)的知識融合,所以在本章開始,會先講解Web開發(fā)中Cookie及Session的知識。然后,再系統(tǒng)地講解Django內(nèi)置的用戶管理功能。Manabe項目的用戶管理功能,就是在結合Django內(nèi)置功能及自定義功能之上實現(xiàn)的。在實現(xiàn)用戶管理功能的相關代碼時,我們會按照表單代碼、視圖代碼、模板代碼及路由注冊代碼這四大步驟(有的功能塊可能沒有表單內(nèi)容),細致地講解代碼的主要內(nèi)容。 第6章:在本章中,主要講解自動化軟件部署系統(tǒng)中應用和服務器的錄入。有了這兩個功能,再加上合適的權限管理,就能讓不同的用戶參與到系統(tǒng)的建設中來,讓運維研發(fā)人員專注于系統(tǒng)的開發(fā)和功能的完善,而系統(tǒng)數(shù)據(jù)的準備性和擴展性就留給不同的部門分別負責。在技術上,本章系統(tǒng)地講解了Django開發(fā)技術中的類視圖(class based view)、自定義的四級用戶權限設計、zTree的前端庫用于實現(xiàn)權限樹形展示、Select 2前端庫用于多用戶的方便選擇;在最后,還示范了Django中的Model測試、View測試及Form測試用例的編寫。 第7章:在本章,實現(xiàn)了發(fā)布單的新建、軟件編譯功能。其中,在編譯軟件時,調(diào)用了Python的第三方庫操作Jenkins的API接口,有了這個功能之后,發(fā)布系統(tǒng)就可以將Jenkins隱藏于幕后,減輕一般研發(fā)人員親自操作Jenkins的負擔。 第8章:環(huán)境流轉(zhuǎn),是我們在實際工作中遇到的一個功能。可能有的公司不需要,但知道如何實現(xiàn)這一功能,相信對讀者會有一定的啟發(fā)。一個發(fā)布系統(tǒng)有了環(huán)境流轉(zhuǎn)功能,并對它進行權限管理,就可以將開發(fā)、測試、運維三種角色串連起來,形成自動化部署的流水線操作。 第9章:在本章,實現(xiàn)了自動化部署的核心功能軟件部署。同樣,我們會以視圖、網(wǎng)頁模板、URL路由的方式進行層層推進實現(xiàn)。對三個最重要的函數(shù),deploy_cmd()、deploy()、cmd_run()的代碼,也進行了細致的講解。其中,涉及到調(diào)用saltstack api的內(nèi)容,也進行了相應的封裝。在發(fā)布過程中,涉及的服務器和應用的數(shù)據(jù)表字段變化,都有細致入微的實現(xiàn)。在實現(xiàn)發(fā)布的同時,服務啟停作為一個附加而常用的功能,也可以進行功能上的實現(xiàn)。當然,這些都是基于第6章的權限管理機制來進行控制的。本章末尾,發(fā)布的歷史記錄功能,也都一一實現(xiàn)。 第10章:在本章,我們使用了Django Channels這樣一個較新的WebSocket技術,解決了軟件發(fā)布過程中的實時日志讀取的問題。為了示范分模板的調(diào)用,在本章中,我們啟動了一個名為mablog的新的Django項目。這個項目的主要目的有兩個:一是實現(xiàn)寫入日志的API,供第9章的軟件發(fā)布時調(diào)用;二是使用WebSocket的實時雙向連接推送技術,把日志作為消費者,在一個連接中實時地從服務器推向瀏覽器。相對于間隔循環(huán)的Ajax,它的優(yōu)勢可以說是相當明顯的。但由于這是一個新的異步技術實現(xiàn),需要讀者在熟悉了Django的常規(guī)同步編程之后,才能繼續(xù)本章的學習。在本章接下來的部分,講解如何使用Daphne在生產(chǎn)中部署mablog項目,以及如何編寫Channels連接的測試用例。 第11章:本章主要講解如何使用Django REST Framework(DRF)進行RESTful API接口的開發(fā)。在本章中,首先講述了DRF的安裝配置,以及為了安全而設計的Token認證實現(xiàn)。然后,基于DRF的Viewset集成快速開發(fā)功能,實現(xiàn)了用戶App應用,以及服務器的API接口開發(fā)。其間,涉及到的序列化技術、外鍵引用技術、Token生成及獲取、URL注冊規(guī)則都有實戰(zhàn)級的演示。最后,還使用了Requests庫進行Post、Get請求測試,介紹了如何進行DRF的測試用例的編寫。 第12章:作為本書的最后一章,首先實現(xiàn)了Django中的Logging日志記錄功能,接著使用百度echarts技術,實現(xiàn)了一個簡單的發(fā)布單數(shù)據(jù)編譯曲線圖和柱狀圖。用戶可以在此基礎上,實現(xiàn)更多的系統(tǒng)統(tǒng)計和圖表功能。Django的生產(chǎn)環(huán)境部署,也是一個必不可少的學習內(nèi)容。在本章,我們示例了在生產(chǎn)環(huán)境中推薦的uwsgi、gunicorn的安裝及運行,以及前端Nginx代碼的配置。同時,為了對接新興的Docker容器技術,在本章還實現(xiàn)了Nginx鏡像,以及支持Uwsgi、Gunicorn、Channels模板的鏡像。最后,介紹了如何使用Coverage這個工具,實現(xiàn)Django開發(fā)中的代碼覆蓋率測試報告。 附錄1:詳細講解了Python 3.6在Windows系統(tǒng)下的安裝、Django 2.1的安裝配置、Pycharm開發(fā)IDE的基本配置使用。對于日常開發(fā)中的Python虛擬環(huán)境管理當前流行的基于內(nèi)置Venv模板及Pipenv都有所涉及。 附錄2:現(xiàn)在,很多公司的代碼管理平臺都從Svn切換到GitLab。這個附錄,就講解了GitLab的安裝、服務啟停和常用功能的使用,如新增項目及項目組、新增用戶及授權。 附錄3:Jenkins在中小企業(yè)幾乎已成為CI工具的代名詞,我們的自動化部署系統(tǒng)也是調(diào)用Jenkins的API來生成軟件包的。在本附錄中,首先演示了如何使用Docker容器來快速安裝一個Jenkins示例服務器。然后,進行初步的管理配置。接著,介紹了Jenkins新版中的Pipeline的語法入門。有了這些基礎知識,就能理解自動化部署系統(tǒng)中的Jenkins方面的內(nèi)容了。 附錄4:在自動化部署系統(tǒng)中,我們使用了一個名為Hui的開源前端管理框架,用于快速生成所有網(wǎng)頁的模板。在本附錄中,重點講解了這個Hui前端框架的主要組件。然后,將自動化部署系統(tǒng)的前端網(wǎng)頁,按子模板形式進行了劃分。有了這些基礎知識,在看正文時,前端代碼部分就很好地對接起來了。除此之外,對于實踐開發(fā)過程中使用的三個主要前端庫jQuery、zTree、Select 2,也進行了簡單的講解。 附錄5:這是本書最后一個附錄,講解了目前最流行的企業(yè)Docker倉庫管理工具Harbor。其安裝、配置、用戶管理、項目管理過程,都以實踐的形式一一呈現(xiàn)。最后,還進行了Docker上傳及下載的測試。讀者可以結合第12章的幾個鏡像,學習如何將企業(yè)內(nèi)容實現(xiàn)Docker鏡像的管理。這對于現(xiàn)在的運維及運維研發(fā)人員,都可以說是一個基本技能了,故在最后,涉及到了塊的內(nèi)容。 代碼規(guī)范 本書涉及的代碼有三種,下面一一說明其顯示規(guī)范。
書中的命令行,以BKB小五號字體,加粗強調(diào)顯示。如下示例:python manage.py runserver2. 命令輸出 命令的輸出,以BKB小五號字體,加粗強調(diào)顯示。如下示例:Performing system checks... System check identified no issues (0 silenced). September 15, 2018 - 22:07:46 Django version 2.1, using settings manabe.settings Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.3. 程序代碼 程序代碼的顯示,首先會分行,然后給出此代碼所有Github的URL鏈接地址。此地址以BKB小五號字體、加粗、斜體強調(diào)顯示。緊接著給出代碼內(nèi)容,每一行代碼左邊都會有連續(xù)的行號,整個代碼塊以淺灰色為底。代碼內(nèi)容如果強調(diào)不為完整文件或內(nèi)容,會有…省略號出現(xiàn)。如果代碼內(nèi)容強調(diào)為一個完整的類或函數(shù)或文件,則不會涉及…省略號?傊,一切最終代碼,以Github上的為準。 這里需要再次強調(diào)的是,代碼塊中的行號,是為了在接續(xù)的代碼解釋中方便解釋之用,并不代表此代碼塊在Github文件中真正的行號。這樣做的原因是,我們常常需要將Github中的一個代碼文件,在不同的頁面拆成不同的代碼塊來解釋。如果特別強調(diào)行號的對應關系,反而會讓讀者在閱讀書中的每一個代碼塊時,有不連貫的感覺;而且在代碼解釋中,也會有支離破碎的數(shù)字,因而,我們會采用每個代碼塊自我連續(xù)的行號處理方案。這是讀者在看本書代碼和Github上代碼時,需要特別注意的地方。 讀者對象 本書不是一本細致講解Python的入門書,所以希望讀者具有一定的Python基礎,有過使用Python開發(fā)腳本或是其他應用的經(jīng)驗,至少,也應該看過網(wǎng)上幾篇入門版的教程。A Byte of Python(《簡明Python教程》)這本入門級教程,值得推薦。 另外,也希望讀者能有一點運維經(jīng)驗,對Linux系統(tǒng)的操作較熟悉。 能滿足以上兩點要求的IT從業(yè)人員,都可以是本書的讀者對象。 致謝 首先,感謝北京航空航天大學出版社的劇艷婕編輯,是她讓我們有機會系統(tǒng)地總結自己的技能,并能高效地把本書推送到讀者面前。 ========================================================= 本書寫作過程,適逢家中新增二寶。妻子潘永日夜操心,孝云大姐不辭辛勞;我則陪伴甚少,無以為報。遙想家母魏恩樞,艱難時代,自學縫紉起家,養(yǎng)大我兄弟姐妹四人,個中強韌,不言而喻。本書如果有小小成就,要歸功于這天下無私而偉大的母愛! 陳剛 ========================================================= 感謝親人,感謝朋友! 王洪軍 ========================================================= 感謝公司領導和同事對我們平時工作的支持和理解。 在寫作本書時,兩位作者參考了網(wǎng)上的大量文檔,由于這些文檔相互引用的情況比較多,所以本書并未能逐個列舉出所有參考資料。在此一一感謝這些朋友,是他們,讓這個IT世界更美好。 糾錯 限于作者能力有限,書中錯誤在所難免。如果讀者發(fā)現(xiàn)其中錯誤,歡迎發(fā)送到作者郵箱aguncn@163.com。請以xxx章節(jié)xx頁的內(nèi)容或代碼有錯誤為標題。 陳剛,有關于大數(shù)據(jù)、軟件開發(fā)、電商網(wǎng)絡平臺、云計算和互聯(lián)網(wǎng)金融平臺等工作經(jīng)驗,現(xiàn)主要從事服務器網(wǎng)絡運維及運維開發(fā)相關的工作,主攻Docker容器技術及Kubernetes的自動化運維,開發(fā)語言以Python為主,且涉及php、java和go語言等。 王洪軍,有關于電商平臺開發(fā)經(jīng)驗,主攻運維開發(fā)領域,在Docker容器技術及Kubernetes編排技術上有自己獨到的見解。 第1章Python基礎1
你還可能感興趣
我要評論
|