




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
深入淺出Python編程
(
面向?qū)ο蟪绦蛟O(shè)計(jì))采集網(wǎng)絡(luò)圖書數(shù)據(jù)
從當(dāng)當(dāng)網(wǎng)和豆瓣網(wǎng)查詢圖書信息將當(dāng)當(dāng)網(wǎng)查詢的圖書信息解析并以字典形式存入文件將豆瓣網(wǎng)查詢的圖書信息解析并以文本的形式存入文件Outcome單元目標(biāo)/Objectives理解面向?qū)ο蟪绦蛟O(shè)計(jì)思想
掌握面向?qū)ο缶幊痰娜筇匦?/p>
熟練掌握Python類和對(duì)象的基本使用
理解類成員和實(shí)例成員的區(qū)別
掌握簡(jiǎn)單網(wǎng)絡(luò)爬蟲應(yīng)用⑥具有良好的職業(yè)道德和法治意識(shí)內(nèi)容及計(jì)劃/Agenda&Schedule12/6ClassHoursDetails??茟?yīng)用本科<00:10><00:10>回顧&成果介紹<01:20><00:40>了解面向?qū)ο蟪绦蛟O(shè)計(jì)<01:20><00:40>類的派生:編寫爬蟲基類<02:05><01:05>檢索并爬取當(dāng)當(dāng)網(wǎng)圖書數(shù)據(jù)<01:20><00:40>了解正則表達(dá)式<01:40><00:40>檢索并爬取豆瓣網(wǎng)圖書數(shù)據(jù)<00:05><00:05>課堂小結(jié)Total:12/6hours(8/4hPractice)01圖書數(shù)據(jù)采集webcrawler1.任務(wù)分析目標(biāo)解構(gòu)采集數(shù)據(jù):發(fā)起網(wǎng)絡(luò)訪問請(qǐng)求,并獲得網(wǎng)站返回的響應(yīng)網(wǎng)頁(yè)HTML文件。解析數(shù)據(jù):對(duì)拿到的網(wǎng)頁(yè)文件進(jìn)行分析、解析,找到包含所需數(shù)據(jù)的HTML節(jié)點(diǎn)。清理數(shù)據(jù):對(duì)提取的數(shù)據(jù)按規(guī)范的存儲(chǔ)要求進(jìn)行查漏補(bǔ)缺,統(tǒng)一格式要求。保存數(shù)據(jù):將最終的數(shù)據(jù)保存到文件或數(shù)據(jù)庫(kù)。模式識(shí)別JSON和TEXT格式的數(shù)據(jù)文件。提取書名、作者和出版社等三項(xiàng)數(shù)據(jù)。1.任務(wù)分析模式歸納采集數(shù)據(jù)主要是發(fā)起HTTP網(wǎng)絡(luò)訪問請(qǐng)求。解析數(shù)據(jù)要從網(wǎng)頁(yè)HTML文件中提取包含所需數(shù)據(jù)的節(jié)點(diǎn),并從中拿到數(shù)據(jù)項(xiàng),這需要對(duì)HTMLDOC結(jié)構(gòu)進(jìn)行操作;清理數(shù)據(jù)是按規(guī)范格式整理數(shù)據(jù)。保存數(shù)據(jù)只涉及到文件的寫入操作。算法設(shè)計(jì)OOP編程:將相同的需求抽象出來(lái)封裝到基類,將相似但有不相同的需求分別由不同的子類來(lái)實(shí)現(xiàn)。requests第三方模塊發(fā)起訪問請(qǐng)求。BeautifulSoup和正則表達(dá)式。2.任務(wù)準(zhǔn)備requests模塊模擬訪問Web服務(wù)器、自動(dòng)提交網(wǎng)絡(luò)請(qǐng)求一般,爬蟲的時(shí)候通過設(shè)置User-Agent+Referer偽裝成瀏覽器去訪問網(wǎng)頁(yè)也是繞過反爬蟲的一種手段beautifulsoup4模塊從HTML或XML文件中提取數(shù)據(jù)支持Python標(biāo)準(zhǔn)庫(kù)中的HTML解析器(html.parser),還支持一些第三方的解析器,包括lxml解析器、html5lib解析器等2.任務(wù)準(zhǔn)備什么是HTML文檔<HTML>:通知客戶端瀏覽器這是一個(gè)HTML文檔,需要瀏覽器用HTML格式解釋它,直到文件尾部的</HTML>。<HEAD>:文檔的起始部分,主要是用來(lái)描述文檔的一些基本性質(zhì),不會(huì)被當(dāng)成網(wǎng)頁(yè)的主體顯示在瀏覽器中。<BODY>:文檔的內(nèi)容部分,顯示在瀏覽器中。<!DOCTYPEhtml><html></html><head></head></body><body><title>Python編程
</title><metacharset=‘uft-8’/><p>這是正文里的一個(gè)段落</p><html><body><h1><p>02認(rèn)識(shí)類和對(duì)象Class&Object1.了解面向?qū)ο缶幊堂嫦驅(qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming,OOP):一種基于“對(duì)象(objects)”概念的編程范式一種基于“對(duì)象(objects)”概念的編程范式包含數(shù)據(jù)/data和代碼/code:字段(fields)形式的數(shù)據(jù),通常稱為特性(attributes)或?qū)傩裕╬roperties)。過程(procedures)形式的代碼,通常稱為方法(methods)。1.了解面向?qū)ο缶幊填愂悄0?,?duì)象是根據(jù)模板創(chuàng)建的特定實(shí)例類(class)是一個(gè)抽象概念,是一系列具有相同特征和行為的事物的統(tǒng)稱;對(duì)象(object)作為內(nèi)存區(qū)域,可包含任意數(shù)量和類型的數(shù)據(jù)并由標(biāo)識(shí)符引用。1.了解面向?qū)ο缶幊堂嫦驅(qū)ο缶幊痰娜筇匦苑庋b(encapsulation):封裝=數(shù)據(jù)+代碼;類=變量+方法繼承(inheritance):派生類/子類自動(dòng)擁有其父類的所有屬性和方法多態(tài)(polymorphism):縱向上來(lái)看,依賴于繼承;橫向上看,依賴于接口(interface)。2.類的創(chuàng)建與實(shí)例化—
實(shí)例成員Python創(chuàng)建一個(gè)類要用到關(guān)鍵字class,語(yǔ)法格式如下:2.類的創(chuàng)建與實(shí)例化—
實(shí)例成員Python創(chuàng)建一個(gè)類要用到關(guān)鍵字class,語(yǔ)法格式如下:創(chuàng)建一個(gè)對(duì)象的語(yǔ)法格式如下:2.類的創(chuàng)建與實(shí)例化—
實(shí)例成員類的實(shí)例之間互補(bǔ)干擾self__str()__方法可以得到實(shí)例對(duì)象的地址2.類的創(chuàng)建與實(shí)例化—
實(shí)例成員Python允許動(dòng)態(tài)地為類和對(duì)象增加成員實(shí)例對(duì)象動(dòng)態(tài)創(chuàng)建的屬性只對(duì)該實(shí)例對(duì)象有效,對(duì)同一類的其它對(duì)象是沒有影響的2.類的創(chuàng)建與實(shí)例化—
類的成員類的成員屬性相同類的實(shí)例對(duì)象都能共享一個(gè)在“類層面的全局變量”3.成員的訪問控制—
名稱中的下劃線Python雖然沒有嚴(yán)格的私有成員概念,但通過對(duì)使用下劃線“_”、雙下劃線“__”命名的約定,對(duì)成員屬性和成員方法的“可見”性有其專門含義前置單下劃線,_var:命名約定,供內(nèi)部使用/受保護(hù),對(duì)python解釋器沒作用。后置單下劃線,var_:命名約定,規(guī)避與Python關(guān)鍵字名字的沖突。前置雙下劃線,__var:類中使用觸發(fā)名稱改寫(namemangling),對(duì)python解釋器有作用。前后雙下劃線,__var__:Python定義的特殊方法,自定義的屬性中要避免使用。僅單下劃線,_:臨時(shí)的、無(wú)關(guān)緊要的。3.成員的訪問控制—
名稱中的下劃線訪問限制-私有變量3.成員的訪問控制—
添加屬性訪問限制-方法封裝類的設(shè)計(jì)中定義變量為私有,然后再為該變量編寫兩個(gè)成員函數(shù)分別用于讀和寫。3.成員的訪問控制—
添加屬性訪問限制-屬性讀裝飾器:@property寫裝飾器:@屬性名.setter。3.成員的訪問控制—
添加屬性最佳實(shí)踐一旦我們決定使用屬性,那就在所有的地方都要去使用屬性。python_beginner._Book__price名稱改寫的方式直接訪問私有變量,但并不推薦這么做編寫類的屬性4.特殊的類和方法—
類方法與類的屬性相似,類也可以擁有方法:使用裝飾器@classmethod修飾,可以通過類名調(diào)用類方法,也可以通過對(duì)象名調(diào)用類方法。實(shí)例對(duì)象方法第一個(gè)參數(shù)為self,而類方法第一個(gè)參數(shù)必須是當(dāng)前的類自身,一般命名為cls。4.特殊的類和方法—
靜態(tài)方法類的靜態(tài)方法主要用于類對(duì)外部函數(shù)的封裝,有助于整合代碼,集成通用性的外部函數(shù)到類中。使用裝飾器@staticmethod修飾,不需要傳入默認(rèn)參數(shù)/self&cls。既不能訪問實(shí)例對(duì)象的屬性和方法,也無(wú)法訪問類的屬性和方法。對(duì)象(object)和類(class)都可以調(diào)用靜態(tài)方法4.特殊的類和方法—
靜態(tài)方法4.特殊的類和方法—
模型類模型類(modelclass):自定義數(shù)據(jù)結(jié)構(gòu)來(lái)裝載數(shù)據(jù)只關(guān)注類的屬性,不在意類的方法。一個(gè)“空類”,它將一些命名的數(shù)據(jù)項(xiàng)捆綁在一起。4.特殊的類和方法—
模型類圖書信息Book模型類book.py編寫B(tài)ook模型類03編寫爬蟲基類Crawler1.編寫爬蟲基類—
編寫基類Crawlercrawler.py抽象出對(duì)當(dāng)當(dāng)和豆瓣網(wǎng)的爬蟲操作共性部分都需要知道圖書的名字/book_name存儲(chǔ)爬取書籍信息列表/book_data爬取數(shù)據(jù)后都需要保存到文件中去/save_book1.編寫爬蟲基類—
編寫基類Crawler將每一個(gè)Book實(shí)例對(duì)象寫入一個(gè)txt文件中,并對(duì)每一個(gè)寫入對(duì)象做了計(jì)數(shù),我們稱之為對(duì)象的序列化(serialization)析構(gòu)函數(shù):__del__(self)1.編寫爬蟲基類—
改寫父類的方法派生子類或者說(shuō)派生類繼承了基類/父類的方法后可以直接使用,也可以修改。既可以在繼承的基礎(chǔ)新增功能,也可以重寫父類方法,實(shí)現(xiàn)與父類完全不同的功能。直接打印一個(gè)實(shí)例對(duì)象時(shí)會(huì)輸出該對(duì)象的地址,但如果想自定義輸出內(nèi)容,就可以通過改寫父類object的__str__()方法來(lái)實(shí)現(xiàn)。1.編寫爬蟲基類—
改寫父類的方法改寫Crawler類的save_book()方法Book類自帶格式化的輸出,那么Crawler類中將Book的實(shí)例對(duì)象寫入文件時(shí)就可以直接寫入對(duì)象了,我們?cè)俑膶懸幌翪rawler類的save_book()方法。1.編寫爬蟲基類—
調(diào)用父類的方法編寫子類:繼承自Crawler類classDerivedClassName(modname.BaseClassName):1.編寫爬蟲基類—
調(diào)用父類的方法如果要在子類中直接引用父類的方法:使用super()方法;或者BaseClassName.methodname(self,arguments)04檢索并爬取當(dāng)當(dāng)網(wǎng)圖書DangDang1.爬取并解析HTML數(shù)據(jù)get查詢:search_book(self)方法super()完成了父類的初始化使用模塊:requests.get()偽裝成瀏覽器的訪問/User-Agent屬性中文亂碼:返回值encoding='gbk‘安全編碼:訪問網(wǎng)絡(luò)的代碼置入異常子句1.爬取并解析HTML數(shù)據(jù)HTMLDOM分析所有的圖書查詢結(jié)果都包含在一個(gè)<ul></ul>標(biāo)簽對(duì)中每本圖書的信息包含在<ul>包含的<li></li>標(biāo)簽對(duì)中class="bigimg"id="component_59"1.爬取并解析HTML數(shù)據(jù)BeautifulSoup+html.parser2.JSON格式保存數(shù)據(jù)如何讓Python知道我們自己定義的對(duì)象與JSON對(duì)象之間的轉(zhuǎn)換映射關(guān)系json模塊的JSONEncoder類用于Python數(shù)據(jù)結(jié)構(gòu)的可擴(kuò)展JSON編碼器改寫json.JSONEncoder類的default(self,obj)成員方法來(lái)實(shí)現(xiàn)BookEncoder類創(chuàng)建了一個(gè)BookEncoder的新類,該類繼承自json.JSONEncoder類,并在子類中改寫了default()成員方法2.JSON格式保存數(shù)據(jù)改寫父類Crawler類中的save_book()成員方法識(shí)別自定義類型Book:cls=BookEncoder中文不亂碼:ensure_ascii=False從當(dāng)當(dāng)網(wǎng)檢索并解析結(jié)果,將數(shù)據(jù)以JSON格式形式存入文件05檢索并爬取豆瓣網(wǎng)圖書Douban1.了解正則表達(dá)式—
模式定義正則表達(dá)式(regularexpression)是一種描述字符串模式結(jié)構(gòu)的方法,將模式(pattern)與字符序列(string)進(jìn)行匹配。所謂模式也是一個(gè)字符串,它由一些普通字符和正則表達(dá)式元字符(metacharacters)組成,用于與字符串匹配,完成“查找和替換”。正則表達(dá)式元字符(metacharacters)重復(fù)它們或改變它們的含義來(lái)影響正則的其他部分。常見的如右表所示。1.了解正則表達(dá)式—
模式定義1.了解正則表達(dá)式—
模式定義1.了解正則表達(dá)式—
模式定義特殊的正則表達(dá)式序列由于字符*、+、?等在正則表達(dá)式中有特殊的含義,因此它們不能用來(lái)匹配相應(yīng)的普通字符。為了匹配有特殊含義的字符,必須使用轉(zhuǎn)義序列“\”,比如:\.\?,就表示“.?”除了作為轉(zhuǎn)義序列符使用,還可以表示一些特殊序列,見左表1.了解正則表達(dá)式—
字符匹配re模塊還為我們提供了多個(gè)函數(shù)用于匹配、搜索以及找出匹配對(duì)象和值match():從字符串開頭去匹配并返回匹配的字符串的match對(duì)象,可以調(diào)用對(duì)象的group()方法獲取匹配成功的字符串;search():并不局限于字符串的開頭,掃描整個(gè)字符串找到匹配樣式的第一個(gè)位置,并返回一個(gè)相應(yīng)的匹配對(duì)象(matchobjects);findall():以字符串列表或字符串元組列表的形式返回所有非重疊匹配。1.了解正則表達(dá)式—
字符匹配匹配郵箱re模塊的search()函數(shù)會(huì)去掃描整個(gè)字符串,如果匹配成功的話就會(huì)返回一個(gè)匹配對(duì)象(matchobjects),要獲取匹配到的值,可以只用匹配對(duì)象的group()方法。海象運(yùn)算符:=賦值表達(dá)式(assignmentexpressions),將賦值操作和條件判斷合二為一。1.了解正則表達(dá)式—
字符替換修改字符串split():將字符串拆分為一個(gè)列表,在正則匹配的任何地方將其拆分。sub():找到正則匹配的所有子字符串,并用不同的字符串替換它們。subn():與sub()相同,但返回新字符串和替換次數(shù)。2.使用正則表達(dá)式解析數(shù)據(jù)爬取檢索結(jié)果super()調(diào)用父類的構(gòu)造函數(shù)完成了初始化⑤偽造了一個(gè)HTTP請(qǐng)求的header⑨查詢參數(shù)裝入了一個(gè)字典對(duì)象search_key?“1001”表示為圖書分類;“q”為查詢的參數(shù)2.使用正則表達(dá)式解析數(shù)據(jù)解析網(wǎng)頁(yè)
書:<divclass="content">……</div>數(shù)據(jù):<divclass=“title”>子標(biāo)簽中:書名:<a>標(biāo)簽作者及出版社:<divclass="rating-info">2.使用正則表達(dá)式解析數(shù)據(jù)2.使用正則表達(dá)式解析數(shù)據(jù)爬取豆瓣網(wǎng)圖書信息課堂小結(jié)Python支持面向?qū)ο缶幊蹋∣OP)的所有標(biāo)準(zhǔn)特性。封裝、繼承和多態(tài)是面向?qū)ο缶幊讨校∣OP)其重要的三大特性。使用類(class),可以將數(shù)據(jù)及數(shù)據(jù)的操作組織到一起,從而可以創(chuàng)造一個(gè)可復(fù)用的組件(components)。Python中一切皆對(duì)象,類是模板、對(duì)象是實(shí)例。提問&解答深入淺出Python編程
(模塊6Web應(yīng)用程序設(shè)計(jì))用Flask開發(fā)系統(tǒng)監(jiān)控看板應(yīng)用
按國(guó)旗法要求的標(biāo)準(zhǔn)制法畫國(guó)旗顯示輔助線、體現(xiàn)繪制過程右下角加文字:我愛中國(guó)五角星畫法在非Window平臺(tái)下正常顯示Outcome單元目標(biāo)/Objectives理解Web應(yīng)用程序的工作原理
理解HTTP的請(qǐng)求/request和響應(yīng)/response
了解MVC架構(gòu)模式并編寫代碼
了解RESTWeb服務(wù)編程/API
掌握Flask框架開發(fā)簡(jiǎn)單Web程序⑥具有追求卓越的工匠精神內(nèi)容及計(jì)劃/Agenda&Schedule6ClassHoursDetails<00:10>回顧&成果介紹<00:25>了解三層結(jié)構(gòu)的FlaskWeb應(yīng)用程序<01:20>開發(fā)三層架構(gòu)的監(jiān)控看板Web應(yīng)用<00:40>了解MVC架構(gòu)的FlaskWeb應(yīng)用<01:20>開發(fā)前后端分離的監(jiān)控看板Web應(yīng)用<00:05>課堂小結(jié)Total:6hours(4hPractice)01系統(tǒng)監(jiān)控看板monitor1.任務(wù)分析目標(biāo)解構(gòu)一是,前端UI(UserInterface,用戶接口),也就是直接和用戶面對(duì)面的網(wǎng)頁(yè)界面,它將用于呈現(xiàn)CPU和內(nèi)存的占用率等信息。二是,后臺(tái)的數(shù)據(jù),這里主要是要獲取計(jì)算機(jī)的CPU和內(nèi)存的占用率,以及內(nèi)存的消耗數(shù)據(jù)。三是,中間層(業(yè)務(wù)邏輯層),主要是將從后臺(tái)獲取的數(shù)據(jù)轉(zhuǎn)化成相應(yīng)的圖表。模式識(shí)別圖表可以使用之前學(xué)習(xí)過的pyecharts模塊、頁(yè)面布局可以使用BootStrap庫(kù)。后臺(tái)的數(shù)據(jù)獲取比較簡(jiǎn)單,可以使用學(xué)習(xí)過的psutil模塊來(lái)實(shí)現(xiàn)。中間業(yè)務(wù)邏輯層編寫代碼的重點(diǎn),需要使用獲取到的數(shù)據(jù)創(chuàng)建儀表盤圖和折線圖;對(duì)于前后的分離的結(jié)構(gòu),可以使用Ajax進(jìn)行調(diào)研。1.任務(wù)分析模式歸納Web應(yīng)用的核心:一個(gè)是客戶端(Browser)和Web服務(wù)器端(WebServer)之間的HTTP訪問(request)和響應(yīng)(response);另一個(gè)是Web服務(wù)器和應(yīng)用服務(wù)器(ApplicationServer)之間的通信處理。算法設(shè)計(jì)前端UI借助BootStrap來(lái)解決頁(yè)面布局、色彩搭配等問題,且不需要太專業(yè)的前端知識(shí);pyecharts可以方便的創(chuàng)建儀表盤圖和折線圖等漂亮圖表。Python的Flask框架可以大大簡(jiǎn)化Web開發(fā)難度/不用寫CGI。2.任務(wù)準(zhǔn)備Flask框架——依賴于:WerkzeugWSGI(WebServerGatewayInterface,Web服務(wù)器網(wǎng)關(guān)接口,讀作“wiz-ghee”)套件,為Flask框架提供了一個(gè)和Web服務(wù)器通信的底層庫(kù)。Jinja模板引擎,為客戶端展現(xiàn)提供了模板渲染引擎,編寫類似于Python語(yǔ)法的代碼,然后傳遞模板數(shù)據(jù)以呈現(xiàn)最終網(wǎng)頁(yè)文檔,也就是視圖的渲染。目前,使用的是Jinja2版本。2.任務(wù)準(zhǔn)備BootStrap一個(gè)基于HTML+CSS+JavaScript開發(fā)的用于快速開發(fā)Web應(yīng)用程序和網(wǎng)站的前端框架,它包含了功能強(qiáng)大的內(nèi)置組件,且易于定制,其響應(yīng)式(Responsive)CSS能夠自適應(yīng)于臺(tái)式機(jī)、平板電腦和手機(jī)的屏幕大小,為開發(fā)人員創(chuàng)建前端UI提供了一個(gè)簡(jiǎn)潔統(tǒng)一的解決方案。Ajax(AsynchronousJavaScriptAndXML,異步JavaScript和XML)異步操作是相對(duì)應(yīng)同步(Synchronous)而言的,Ajax允許通過在后臺(tái)與Web服務(wù)器交換數(shù)據(jù)來(lái)異步更新網(wǎng)頁(yè)。02開發(fā)三層架構(gòu)的監(jiān)控看板Web應(yīng)用WebApplication1.了解三層結(jié)構(gòu)的Web應(yīng)用程序表示層:向用戶顯示信息并從用戶那里收集信息。Web表示層通常使用HTML、CSS和JavaScript開發(fā)。應(yīng)用層:也稱為邏輯層或中間層(BLL,BusinessLogicLayer),使用Python等開發(fā),并使用API調(diào)用與數(shù)據(jù)層進(jìn)行通信。數(shù)據(jù)層:也稱為數(shù)據(jù)訪問層(DAL,DataAccessLayer)是存儲(chǔ)和管理應(yīng)用程序處理的信息的位置。簡(jiǎn)單的理解:表示層提供用戶界面,應(yīng)用層處理用戶輸入輸出的業(yè)務(wù)邏輯,而數(shù)據(jù)層存儲(chǔ)數(shù)據(jù)。2.創(chuàng)建FlaskWeb應(yīng)用程序Flask是基于Werkzeug實(shí)現(xiàn)的WSGI工具包和Jinja2模板引擎,借助于Werkzeug和Jinja2,我們可以在更抽象的層面編寫復(fù)雜的Web應(yīng)用,利用PythonWeb框架,Web的開發(fā)也變得更簡(jiǎn)單。靜態(tài)文件可以直接交由Web服務(wù)器處理。2.創(chuàng)建FlaskWeb應(yīng)用程序—
路由和視圖函數(shù)一個(gè)完整的FlaskWeb應(yīng)用一般會(huì)包含:一個(gè)應(yīng)用實(shí)例對(duì)象、一個(gè)路由和一個(gè)視圖函數(shù)。Flask實(shí)例對(duì)象所有FlaskWeb應(yīng)用都需要?jiǎng)?chuàng)建一個(gè)Flask實(shí)例對(duì)象,她以主模塊名或包的名稱為參數(shù)構(gòu)建Flask實(shí)例,一般__name__變量就是所需的值。app.route()裝飾器來(lái)定義路由Flask框架中維持了一個(gè)URL與Python函數(shù)之間的一個(gè)映射關(guān)系,稱之為路由(route),對(duì)應(yīng)的處理函數(shù)就是視圖函數(shù)。2.創(chuàng)建FlaskWeb應(yīng)用程序—
路由和視圖函數(shù)創(chuàng)建Flask實(shí)例:app=Flask(__name__)@app.route()裝飾器將首頁(yè)的訪問URL與視圖函數(shù)index()綁定http://xxx.x.x.x:5000/或者h(yuǎn)ttp://xx.x.x.x:5000/home,都能訪問“debug=False”:表明Flask應(yīng)用是在調(diào)試模式下運(yùn)行,在該模式下,服務(wù)器會(huì)加載重載器(reloader)和調(diào)試器(debugger),重載器會(huì)監(jiān)視項(xiàng)目中的所有源代碼文件,發(fā)現(xiàn)有修改的話會(huì)自動(dòng)重啟服務(wù)器啟動(dòng)APP:Runningonhttp://xx.x.x.x:50002.創(chuàng)建FlaskWeb應(yīng)用程序—
請(qǐng)求/響應(yīng)循環(huán)的參數(shù)傳遞動(dòng)態(tài)路由傳遞參數(shù)是@app.route()裝飾器中的一種特殊句法,調(diào)用視圖函數(shù)時(shí),F(xiàn)lask會(huì)將動(dòng)態(tài)部分作為關(guān)鍵字參數(shù)傳遞給視圖函數(shù)??梢酝ㄟ^使用<converter:variable_name>為變量增加一個(gè)轉(zhuǎn)換器,它為參數(shù)指定了數(shù)據(jù)類型。2.創(chuàng)建FlaskWeb應(yīng)用程序—
請(qǐng)求/響應(yīng)循環(huán)的參數(shù)傳遞動(dòng)態(tài)路由傳遞參數(shù)http://xx.x.x.x:5000/user/caowen2.創(chuàng)建FlaskWeb應(yīng)用程序—
請(qǐng)求/響應(yīng)循環(huán)的參數(shù)傳遞應(yīng)用和請(qǐng)求上下文傳參應(yīng)用上下文(ApplicationContext):跟蹤應(yīng)用程序級(jí)數(shù)據(jù),應(yīng)用程序application可以簡(jiǎn)單的理解為創(chuàng)建Flask實(shí)例對(duì)象“app=Flask(__name__)”時(shí)創(chuàng)建的這個(gè)app對(duì)象。應(yīng)用上下文中存儲(chǔ)的值作用于整個(gè)Web應(yīng)用程序,它并不直接將值傳遞給每個(gè)視圖函數(shù),而是訪問current_app和g代理,F(xiàn)lask在處理請(qǐng)求時(shí)自動(dòng)推送應(yīng)用程序上下文,它指向處理當(dāng)前活動(dòng)的app。請(qǐng)求上下文(RequestContexts):保存了客戶端和服務(wù)器交互的數(shù)據(jù),常見的請(qǐng)求上下文對(duì)象有:封裝了HTTP請(qǐng)求的request、記錄請(qǐng)求會(huì)話信息的session等,request主要針對(duì)的是http的請(qǐng)求,session主要針對(duì)的是用戶。2.創(chuàng)建FlaskWeb應(yīng)用程序—
請(qǐng)求/響應(yīng)循環(huán)的參數(shù)傳遞應(yīng)用和請(qǐng)求上下文傳參http://xxx.x.x.x:5000/user/?name=caowen編寫一個(gè)簡(jiǎn)單的Flask應(yīng)用,分別使用動(dòng)態(tài)路由和上下文請(qǐng)求實(shí)現(xiàn)參數(shù)傳遞2.創(chuàng)建FlaskWeb應(yīng)用程序—
使用模版美化視圖Jinja模板引擎
{%...%}:流程控制語(yǔ)句
{{...}}:表達(dá)式值
{#...#}:注釋2.創(chuàng)建FlaskWeb應(yīng)用程序—
使用模版美化視圖flask_psutil/templates/user_info.html3.使用模版繼承自定義404頁(yè)面使用宏(macro)復(fù)用代碼創(chuàng)建宏:一對(duì)“{%macro……%}”和“{%endmacro%}”標(biāo)簽定義一個(gè)宏。調(diào)用宏:使用“{{……}}”或者“{{callmacro_name()}}”和“{{endcall}}”調(diào)用宏。3.使用模版繼承自定義404頁(yè)面render_template()函數(shù)渲染user_card.html模板,并傳遞參數(shù):user_info=user3.使用模版繼承自定義404頁(yè)面模板塊(block)—Jinja模板繼承網(wǎng)站各頁(yè)面的共性部分,定義成塊(blocks),也就是一些占位符(placeholders),子模板可以覆蓋。定義塊:{%block<block_name>%}{%endblock%}。繼承塊:{%extends<base_temp>%}子模塊中調(diào)用父模塊:{{super()}}404基模塊base.html的基模板文件3.使用模版繼承自定義404頁(yè)面繼承自父模板:base.html覆蓋:title和content模塊部分3.使用模版繼承自定義404頁(yè)面編寫自定義404頁(yè)面4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP監(jiān)視器Web應(yīng)用的分層結(jié)構(gòu)數(shù)據(jù)層:創(chuàng)建model.py代碼文件,創(chuàng)建Computer類,CPU和內(nèi)存占用率數(shù)據(jù)由該類代碼來(lái)獲取。表示層:創(chuàng)建view.py代碼文件,創(chuàng)建View類,結(jié)合pyecharts模塊構(gòu)建前端的兩個(gè)圖表,數(shù)據(jù)從數(shù)據(jù)層代碼classComputer來(lái)獲取。客戶端模板的渲染代碼pyecharts官網(wǎng)已經(jīng)幫我們實(shí)現(xiàn)了,所以不需要再寫宏(macro),本節(jié)案例中也暫時(shí)不需要BootStrap,在下一小節(jié)對(duì)該案例進(jìn)行迭代升級(jí)時(shí)將會(huì)用到。應(yīng)用層:創(chuàng)建monitor_web.py代碼文件,創(chuàng)建Flask應(yīng)用實(shí)例對(duì)象,處理HTTP訪問請(qǐng)求和路由分發(fā)、試圖函數(shù)處理等。4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
CPU占用率折線圖model.pyComputer類(class)來(lái)封裝對(duì)CPU和內(nèi)存數(shù)據(jù)的獲取功能。折線圖中,CPU占用率橫軸(X軸)數(shù)據(jù)是時(shí)間,縱軸(Y軸)數(shù)據(jù)是比例值,因此,我們使用一個(gè)字典來(lái)存儲(chǔ)取到的CPU占用率數(shù)據(jù),字典的key為時(shí)間,字典的value為占用率,且只保留最近10項(xiàng)。memory()用@staticmethod裝飾器將其定義為一個(gè)類的靜態(tài)方法,實(shí)際上成為了一個(gè)工具函數(shù)。4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
CPU占用率折線圖view.py從Computer類獲取CPU占用率數(shù)據(jù)集。創(chuàng)建并配置eCharts的折線圖Line()。為了減少運(yùn)行環(huán)境對(duì)網(wǎng)絡(luò)的依賴,將圖表顯示所需的前端JS文件echarts.min.js部署到本地“/static/js/”文件夾中,所以在折線圖的構(gòu)造函數(shù)中通過配置參數(shù)“js_host”進(jìn)行了指定。4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
CPU占用率折線圖monitor_web.py多種路由接收首頁(yè),且直接轉(zhuǎn)向到CPU占用率視圖。url_for()函數(shù)除了在前端模板中用于動(dòng)態(tài)加載靜態(tài)文件外,還能根據(jù)視圖函數(shù)名稱得到要轉(zhuǎn)向的URL。Markup()函數(shù)對(duì)HTML進(jìn)行安全標(biāo)記。HTTP請(qǐng)求的不同方法(HTTPrequestmethods)GET:獲取資源,可以理解為讀取或者下載數(shù)據(jù),使用GET的請(qǐng)求應(yīng)僅檢索數(shù)據(jù)。POST:向資源提交數(shù)據(jù),用于使用HTML表單將數(shù)據(jù)發(fā)送到服務(wù)器,相當(dāng)于寫入或上傳數(shù)據(jù)。4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
CPU占用率折線圖訪問URL:http://xxx.x.x.x:5000http://xxx.x.x.x:5000/cpu測(cè)試:每發(fā)起一次請(qǐng)求只能獲得當(dāng)時(shí)時(shí)間節(jié)點(diǎn)的數(shù)據(jù),但系統(tǒng)并不會(huì)自動(dòng)更新,需要手動(dòng)刷新瀏覽器才能看到新的數(shù)據(jù)。創(chuàng)建CPU占用率折線圖4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
內(nèi)存占用率儀表盤圖ClassView類:添加memory_gauge(self)成員函數(shù)。除了返回儀表盤圖,還返回內(nèi)存占用率具體數(shù)據(jù)。4.創(chuàng)建監(jiān)控看板Web應(yīng)用APP—
內(nèi)存占用率儀表盤圖monitor_web.py:memo()函數(shù)只響應(yīng)HTTP請(qǐng)求的GET方法。這里只需要顯示圖表、不需要數(shù)據(jù),所以案例中丟棄了從View類memory_gauge()成員函數(shù)中傳遞過來(lái)的內(nèi)存詳情數(shù)據(jù)。創(chuàng)建內(nèi)存占用率儀表盤圖03開發(fā)前后端分離的監(jiān)控看板Web應(yīng)用AjaxWeb1.了解MVC架構(gòu)的Web應(yīng)用模型層/Model包含與應(yīng)用程序相關(guān)的數(shù)據(jù),一般通過模型層直接與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行通信,但不處理有關(guān)如何呈現(xiàn)數(shù)據(jù)的任何邏輯。視圖層/View用于向用戶顯示模型的數(shù)據(jù),View元素處理如何與模型的數(shù)據(jù)鏈接,但不提供用戶如何使用這些數(shù)據(jù)的任何邏輯??刂茖?Cotroller位于模型和視圖層之間,是MVC架構(gòu)模式中的“司令部”,它偵聽視圖中觸發(fā)的所有事件和操作(需要用哪一個(gè)模型來(lái)處理),并對(duì)事件執(zhí)行適當(dāng)?shù)捻憫?yīng)(需要用哪一個(gè)視圖來(lái)顯示)。2.開發(fā)應(yīng)用程序編程接口API在B/S結(jié)構(gòu)中,可以把對(duì)服務(wù)器端請(qǐng)求的數(shù)據(jù)、文件等都看成是資源,且每一個(gè)資源都有一個(gè)URI(UniformResourceIdentifier,統(tǒng)一資源標(biāo)識(shí)符),在前后的分離的開發(fā)中,服務(wù)器端不再向客戶端發(fā)送解析之后的HTML文件,而只發(fā)送客戶端需要的數(shù)據(jù)/JSON。3.創(chuàng)建前后端分離的監(jiān)控看板flask_psutil/static/文件夾用于存儲(chǔ)靜態(tài)資源文件,里面又包含了css、js和images等3個(gè)子文件夾,用于存放圖片、js文件等。flask_psutil/templates/目錄存放的是模板文件,這里既有pyecharts模塊用到HTML文件,也有本案例將要用的base.html和index.html兩個(gè)前端文件。三個(gè)Python代碼文件,包括模型層的model.py、視圖層的view.py,以及控制層的monitor_api.py。3.創(chuàng)建前后端分離的監(jiān)控看板—
模型層(model)開發(fā)模型層(model)模型層為用戶準(zhǔn)備好后端
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 店面出租轉(zhuǎn)讓合同范本
- 二樓商鋪分租合同范本
- 培訓(xùn)企業(yè)戰(zhàn)略合同范本
- 開藥店合伙人合同范本
- 高空車司機(jī)合同范本
- 內(nèi)部承包合同補(bǔ)充協(xié)議書
- 多種類型合同合成協(xié)議書
- 智慧景區(qū)項(xiàng)目合作協(xié)議書
- 房屋租賃合同代理協(xié)議書
- 個(gè)人貨車分期買賣協(xié)議書
- 江蘇省常州市重點(diǎn)中學(xué)2025屆高考?xì)v史三模試卷含解析
- 小學(xué)五年級(jí)下冊(cè)道德與法治期末測(cè)試卷帶答案【考試直接用】
- 甘肅省蘭州市城七里河區(qū)-2023-2024學(xué)年六年級(jí)下學(xué)期小學(xué)期末畢業(yè)測(cè)試語(yǔ)文試卷
- 《裝飾材料與施工》考試復(fù)習(xí)題庫(kù)(含答案)
- 中小學(xué)生民法典主題班會(huì)-民法典宣講課件
- 第一單元大單元教學(xué)設(shè)計(jì)(表格式) 2023-2024學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
- (正式版)SHT 3046-2024 石油化工立式圓筒形鋼制焊接儲(chǔ)罐設(shè)計(jì)規(guī)范
- 小學(xué)高段學(xué)生數(shù)學(xué)應(yīng)用意識(shí)培養(yǎng)的實(shí)踐研究 開題報(bào)告
- GB/T 17592-2024紡織品禁用偶氮染料的測(cè)定
- GA/T 2015-2023芬太尼類藥物專用智能柜通用技術(shù)規(guī)范
- 唱片行業(yè)前景分析
評(píng)論
0/150
提交評(píng)論