<b>摘要:</b>本文詳細介紹了Python WEB開發的基礎入門。以一個部落格站點的開發為例講解了基于Django架構開發WEB站點的全過程。通過本文的學習可以快速掌握基于Django的Python WEB的開發方法,進行WEB站點的實踐開發。
<b>演講嘉賓簡介:</b>
<b>韋玮,</b>企業家,資深IT領域專家/講師/作家,暢銷書《精通Python網絡爬蟲》作者,阿裡雲社群技術專家。
<a href="https://yq.aliyun.com/video/play/1359" target="_blank">本次直播視訊精彩回顧,戳這裡!</a>
<a href="https://yq.aliyun.com/download/2470" target="_blank">本節課代碼及講義下載下傳,戳這裡!</a>
<b>本次的分享主要圍繞以下幾個方面:</b>
Python WEB開發技術簡介
Django簡介與環境配置與MVT設計模式簡介
開發一個部落格站點項目思路
路由編寫與模型設計實戰
快速開發一個網站背景與試圖編寫實戰
模闆設計與編寫以及完善部落格站點的其他功能
後續的話
<b>一、Python WEB開發技術簡介</b>
WEB開發技術主要用于進行網站開發,大家可以使用Python進行網站的開發。進行網站開發最常用的語言是PHP,但Python作為一門比較通用的程式設計語言,它在WEB開發領域同樣是比較适合的。在本文中将會向大家介紹如何使用Python進行WEB開發。在使用Python進行WEB開發時,可以使用不同的架構比如Django、Flask等,當然也可以不基于任何架構直接使用CGI程式設計進行站點開發。本文将與大家分享如何使用Django來進行WEB開發,Django是Python WEB開發中比較成熟的一個架構,足以應對大型項目的壓力。
<b>二、Django簡介與環境配置與MVT設計模式簡介</b>
Django是一款用Python語言設計的比較優秀的WEB開發架構。在安裝Django時,隻需要在指令行下使用pip install django,并将django-admin.exe所在路徑添加到環境變量中即可。安裝完成後可以在指令行下直接運作django-admin指令,如果顯示出一系列Django指令則表示Django的運作環境已經配置完成。如下圖所示。

接下來為大家展示如何利用Django建立一個空白的站點項目。在根目錄下運作django-admin startproject ali即可在根目錄建立一個名為ali的空白站點項目,在目錄下可以看到一個空白站點的基本項目結構。通常一個網絡站點會同時包含許多小站點,比如阿裡雲包含了雲栖社群、雲栖部落格這樣的子站點。在Django中,這樣的子站點也稱為APP。如何在一個站點下建立APP呢?首先,在指令行下進入站點項目。然後,使用python manage.py startapp home指令建立一個名為home的子站。接下來為大家介紹一下子站的結構,進入子站的目錄,其中admin.py主要用于進行背景的配置。models.py主要用于模型設定,模型設定主要和資料庫相關。views.py主要進行視圖設定,在Django中,視圖主要負責業務邏輯的處理,而前端頁面的設計則放在模闆中。
Django是采用MVT的設計模式進行設計的。差別于MVC模式。MVC中,M指模型,V指視圖(主要負責前端頁面的處理),C指控制器(負責業務邏輯的處理),比如ThinkPHP采用的就是MVC架構。而在MVT架構中,M指模型,V指視圖(負責業務邏輯處理),T指模闆(負責前端界面)。是以,在進行實際開發時,應在視圖中實作業務邏輯處理的程式,而前端應在模闆中實作。
<b>三、開發一個部落格站點項目思路</b>
部落格站點案例的展示見視訊。
在進行一個站點開發前,首先需要明确站點的功能。其次,設計站點的資料存儲方式,即站點的模型。之後依次實作各個功能,并在實作過程中對頁面進行設計。在設計過程中需要一些前端的知識。初次接觸前端設計時,為了快速完成前端設計,可以利用一些前端架構。比如bootstrap,它提供了一個可視化布局系統,可以通過拖動元件的方式完成設計,并下載下傳其前端源碼。其界面如下圖。
<b>四、路由編寫與模型設計實戰</b>
路由,指網站的網址結構,即通路請求的配置設定。在Pycharm中打開站點項目。打開urls.py檔案配置路由。首先,通過from home import views as home_views從home站點中導入視圖并起别名為home_views。通過url(r’^admin/’, admin.site.urls)進行網址配置設定,第一個參數代表網址請求,第二個參數代表将通路請求引入哪一個視圖函數中。通過路由編寫可以對網址的結構進行規劃。
完成路由網址規劃後,需要設計整個網站的資料存儲結構,即資料模型。預設情況下會使用sqlite作為資料庫。如果需要将mysql配置為資料庫,可以在settings.py中修改DATABASES部分的代碼。如下圖。
此案例中将使用sqllite作為資料庫。模型的設計一般是根據資料的存儲情況來進行分析的。首先要分析該站點需要存儲什麼資訊。在此案例中,需要存儲的資訊包括使用者資訊、文章資訊、類别資訊、評論資訊。每一種資訊都可以用一張表來存儲,并根據資訊的屬性設計表的字段。在設計表字段時應盡量考慮全面一些。本案例中的表設計如下圖。
在模型設計完成之後要将其轉化為程式語言,模型的實作需在models.py中實作。每一張表都由一個python類實作,每個字段相當于是類中的變量。具體實作詳見視訊。每個字段需要有對應的存儲類型,最常用的類型有CharField用于存儲字元串,EmailField代表郵箱位址,IntegerField代表存儲整型資料,BooleanField代表存儲布爾型資料,TextField代表長文本類型。
<b>五、快速開發一個網站背景與視圖編寫實戰</b>
模型設計完成之後再進行網站背景的開發。開發完網站背景後,才進入視圖編寫即功能實作環節。在Django目錄結構中,每一個檔案都有各自的分工。背景開發需要在admin.py中完成。首先需要在admin.py中注冊之前設計的模型,即将模型綁定到背景中,這樣就可以在背景中管理這些模型了。通過綁定,也提供了一個可視化的環境,避免了通過代碼來控制資料庫。接下裡向大家講解如何在背景中注冊模型。首先,從models中導入各個模型。接着,将需要在背景中展現的資訊利用list_display展示出來。以展現使用者資訊為例,list_display中不包含“passwd”,背景就看不到使用者的密碼。最後利用admin.site.register将資訊真正綁定到背景,它有兩個參數,第一個參數表示需要綁定的模型,第二個參數表示需要展現的資訊。這樣,背景就注冊完畢了。
下一步,建立一個背景賬号。由于案例中使用了資料庫,是以在建立超級管理者之前要先同步資料庫,即利用python将模型同步成資料庫,進入terminal終端,通過python manage.py makemigrations和python manage.py migrate指令來實作。之後再使用指令python manage.py createsuperuser建立超級管理者,如下圖。之後就可以運作站點并登陸背景檢視資料。
接下來講解視圖的編寫。視圖編寫是Django站點編寫的核心。一般來說,每一個功能會以一個視圖函數的形式實作,視圖在views.py中編寫。接下來将為大家一一介紹功能實作過程。第一,實作文章界面展示的功能。首先,需要擷取文章的ID,并在網址中給出。是以要在路由中進行規劃,并在article視圖函數中,将ID設為參數。
而視圖函數要實作的功能就是要根據文章ID将文章查詢出來,就需要用到模型。最常用的查詢方式有以下兩種,第一種,比如Article.objects.filter(id=aid).values(“id”, “title”, “author”, ”content”)。filter表示進行資訊篩選,values表示要取出的字段。第二種, Typemsg.objects.values(“id”,”typename”)不進行資訊篩選,直接取出字段。另外大家應掌握通過模型寫入資料, Usermsg.objects.create(name=name, passwd=passwd, email = email)。在實作文章查找時,首先找到文章存儲在Article表格中。在視圖中導入Article模型,利用查詢指令過濾ID取出文章相關資訊。然後,使用render()為其配置設定一個模闆。
<b></b>
<b>六、模闆設計與編寫以及完善部落格站點的其他功能</b>
接下來介紹模闆的設計與編寫及其他功能的完善。模闆影響着界面的美觀程度。首先,要在settings.py中開啟TEMPLATES,在‘DIRS’中設定模闆的路徑。所有需要的前端模闆都可以放在該檔案目錄下。比如,我們利用render為Article配置設定detail.html這個模闆。進入detail.html進行編寫。前端設計中需要動态變化的部分放在{{…}}中,表示Django中的變量。比如,利用thisarticle.title擷取目前文章标題,thisarticle.author擷取目前文章作者,thisarticle.content擷取目前文章内容。值得注意的是{{thisarticle.content | safe}}通過safe源碼解析,否則将直接在網頁中展示HTML源碼。
<b>注冊功能</b>
在views.py中實作業務邏輯處理。首先觀察session.has_key,若查找到,說明使用者已登陸無需注冊,則直接重定向到根目錄。否則進行注冊,利用render為其配置設定reg.html。在reg.html中完成表單設計,點選送出後就将資訊送出給目前頁面。目前頁面中,通過request.POST捕獲資訊,随後操作Usermsg模型,寫入資料庫。
<b>登陸功能</b>
首先,需要login.html模闆,輸入姓名密碼并送出。在視圖中,首先判斷目前是否登陸,若已登陸則重定向到根目錄。否則傳回登陸界面,捕獲登陸資訊,在模型中通過filter查找該條使用者資訊。若查到到該條記錄則登陸成功并在session中儲存目前使用者名。否則登入失敗。
<b>登出功能</b>
隻需通過del将會話資訊删除即可。
<b>首頁展現</b>
首頁上動态變化的内容包括,博文和博文分類。在視圖中調用模型擷取博文分類和文章資訊。然後進行切片運算。由于在首頁上不可能完全展示資料庫中的所有博文,是以要進行切片(通過[:20]取前二十個)。然後在模闆中通過一個for循環周遊博文類别進行展示。文章同理。詳細代碼見視訊。
博文清單頁,實作方式與首頁類似。隻是不需要進行切片運算。
<b>博文釋出</b>
要求使用者登陸并有管理者權限。首先通過session.has_key 判斷是否登陸,如果沒登陸先跳轉到登陸頁面。若已登陸,則捕獲目前使用者資訊并判斷是否有管理者權限。若不是管理者則重定向到首頁。若是管理者則展現文章釋出的模闆postarticles.html。在模闆中首先設計表單。其次博文類别需要以單選按鈕展示。在釋出文章時就需要用到富文本編輯器。這裡,用kindeditor作為富文本編輯器。donfig.js中設定何時打開富文本編輯器。案例中,我們要求textarea[name=”content”]時調用。然後隻需要在輸入文章内容處配置textarea将name字段設定為content再通過POST送出到views中,寫入資料庫。代碼詳見視訊。
利用Django開發站點關鍵還在于多實踐。
<b>七、後續的話</b>
阿裡雲Python技術直播,希望能幫助大家入門。希望大家在學習過程中也能學會自主解決問題比如查找資料。其次,項目導向是一種比較好的學習方式。可以給自己設立一個項目目标,在期間進行不斷學習。前期輕理論重實戰,後期輕實戰重理論。
<b>本專題系列文章</b>
<a href="https://yq.aliyun.com/articles/563477" target="_blank">從能做什麼到如何去做,一文帶你快速掌握Python程式設計基礎與實戰</a>
<a href="https://yq.aliyun.com/articles/559520" target="_blank">如何快速掌握Python資料采集與網絡爬蟲技術</a>
<a href="https://yq.aliyun.com/articles/568395" target="_blank">Python資料挖掘與機器學習技術入門實戰</a>
<a href="https://yq.aliyun.com/articles/560025" target="_blank">Python資料挖掘與機器學習,快速掌握聚類算法和關聯分析</a>
<a href="https://yq.aliyun.com/articles/563442" target="_blank">手把手教你寫網站:Python WEB開發技術實戰</a>
<b>本文由雲栖志願小組馬JY整理,編輯百見</b>