Python基礎入門,利用Django搭建第一個web框架!(文末福利)
本文面向:有Python基礎,剛接觸web框架的Django初學者。
環境:windows7 python3.5.1 pycharm Django 1.10版 pip3
一、Django簡介
百度百科:一個開放原始碼的Web框架,由Python語言編寫......
重點:一個大而全的框架,啥都替你考慮好了。
1. web框架介紹
具體介紹Django之前,必須先介紹WEB框架的概念。
web框架: 別人已經設定好的一個web網站模板,你學習它的規則,然後“填空”或“修改”成你自己需要的樣子。
一般web框架的架構是這樣的:
其它基於Python的web框架,如tornado、flask、webpy都是在這個範圍內進行增刪裁剪的。例如Tornado用的是自己的非同步非阻塞“wsgi”,flask則只提供了最精簡和基本的框架。Django直接使用WSGI,並實現了大部分Web應用相關的功能。
我在文末左側有為你準備Python flask的零基礎系統學習課程,點選:瞭解更多就可以看見了,希望大家多多支援!
2. MVC/MTV介紹
MVC百度百科:全名Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體工程典範,用業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。
通俗解釋:一種程式碼和檔案的組織和管理形式!不要被縮寫嚇到了,這其實就是把不同型別的檔案放到不同的目錄下的一種方法,然後取了個高大上的名字。當然,它帶來的好處有很多,比如前後端分離,鬆耦合等等,在使用中你慢慢體會就會逐漸明白它,具體就不詳細說明了。
其中:
模型(model):定義資料庫相關的內容,一般放在models.py檔案中。
檢視(view):定義HTML等靜態網頁檔案相關,也就是那些HTML、css、js等前端的東西。
*控制器(controller):定義業務邏輯相關,就是你的主要程式碼。
MTV: Django覺得MVC的字面意思很彆扭,不太符合它的理念,就給它改了一下。view不再是HTML相關,而是主業務邏輯V了,相當於控制器。HTML被放在Templates中,稱作模板T,於是MVC就變成了MTV。這其實就是一個文字遊戲,和MVC本質上是一樣的,換了個名字和叫法而已,換湯不換藥。
3.Django的MTV模型組織
目錄分開,就必須有機制將他們在內裡進行耦合。在Django中,典型的業務流程如下圖所示:
二、Django專案例項
1. 程式安裝
python3.5、pip3及pycharm請自行安裝。
(1)安裝Django:
這裡只介紹較為簡單的pip3命令安裝方式。
win+r,調出cmd,執行命令:pip3 install django,自動安裝Pypi提供的最新版本。
安裝完成後如下圖所示:
(2)配置系統環境 成功安裝Django後,在下圖中的路徑可找到django-admin.exe檔案,將它加入作業系統環境變數中。這樣在以後的呼叫會比較方便。
執行:django-admin help,能看到下面的內容表示安裝過程OK。
2. 建立django專案
在linux等命令列介面下,使用django提供的命令和vim也能進行專案開發。但是,這裡推薦使用pycharm這個目前最好的Python開發IDE,它功能強大,介面友好。(下面所有的操作都在pycharm中進行。)
點選:file-->new project,出現下面的對話方塊。
選擇Django欄目,輸入專案名稱,這裡採用國際慣例的mysite。選擇Python直譯器版本,點選create建立。
Django將自動生成下面的目錄結構:
與專案同名的目錄中是配置檔案,templates目錄是HTML檔案存放處,也就是MTV中的T。manage.py是django專案管理檔案。
3. 建立APP
在每個Django專案中可以包含多個APP,相當於一個大型專案中的分系統、子模組、功能部件等等,相互之間比較獨立,但也可以有聯絡。
所有的APP共享專案資源。
在pycharm下方的terminal終端中輸入命令:
python manage.py startapp cmdb
這樣就建立了一個叫做cmdb的APP,django自動生成“cmdb”資料夾。
4. 編寫路由
路由都在urls檔案裡,它將瀏覽器輸入的url對映到相應的業務處理邏輯。
簡單的urls編寫方法如下圖:
5. 編寫業務處理邏輯
業務處理邏輯都在views.py檔案裡。
通過上面兩個步驟,我們將index這個url指向了views裡的index()函式,它接收使用者請求,並返回一個“hello world”字串。
6. 執行web服務
現在我們已經可以將web服務執行起來了。
命令列的方式是:python manage.py runserver 127.0.0.1:8000
但在pycharm中,你可以這麼幹:
在上部工具欄中找到下面圖示的圖示。
點選下拉箭頭
點選edit configurations
在host中填入:127.0.0.1 port中填入:8000
OK確定之後,點選綠色的三角,web服務就執行起來了。
按圖所示,自動跳轉到瀏覽器程式介面。顯示的卻是下圖的404頁面:
修改一下url,新增“/index”,就一切ok了!
至此,一個最簡單的django編寫的web服務就啟動成功了。
7. 返回HTML檔案
上面我們返回給使用者瀏覽器的是什麼?一個字串!實際上這肯定不行,通常我們都是將HTML檔案返回給使用者。
下面,我們寫這麼一個index.html檔案:
再修改一下views檔案:
為了讓django知道我們的HTML檔案在哪裡,需要修改settings檔案的相應內容。但預設情況下,它正好適用,你無需修改。
接下來,我們可以重新啟動web服務。在瀏覽器重新整理一下,你會看到帶有樣式的“hello world”。
注:這裡有個小技巧,在多次頻繁重啟服務時,由於埠未釋放的原因,容易啟動不了服務,修改一下埠就OK了。
8. 使用靜態檔案
我們已經可以將HTML檔案返還給使用者了,但是還不夠,前端三大塊,HTML、CSS、js還有各種外掛,它們齊全才是一個完整
的頁面。在django中,一般將靜態檔案放在static目錄中。接下來,在mysite中新建個static目錄。
你的CSS,JS和各種外掛都可以放置在這個目錄裡。
為了讓django找到這個目錄,依然需要對settings進行配置:
同樣,在index.html檔案中,可以引入js檔案了:
重新啟動web服務,重新整理瀏覽器,檢視結果。
9. 接收使用者傳送的資料
上面,我們將一個要素齊全的HTML檔案返還給了使用者瀏覽器。但這還不夠,因為web伺服器和使用者之間沒有動態互動。
下面我們設計一個表單,讓使用者輸入使用者名稱和密碼,提交給index這個url,伺服器將接收到這些資料。
先修改index.html檔案
="en">
="UTF-8">
首頁
使用者輸入:
="/index/" method="post">
="text" name="username" />
="password" name="password" />
="submit" value="提交" />
然後修改views.py檔案
此時 ,重啟web服務時,會出錯,因為django有一個跨站請求保護機制,我們在index.html檔案中加入一行{% csrf_token %}。
="en">
="UTF-8">
首頁
使用者輸入:
="/index/" method="post">
{% csrf_token %}
="text" name="username" />
="password" name="password" />
="submit" value="提交" />
再次進入瀏覽器,重新整理頁面:
輸入點東西,然後我們在pycharm中可以看到相應的資料。
10. 返回動態頁面
我們收到了使用者的資料,但返回給使用者的依然是個靜態頁面,通常我們會根據使用者的資料,進行處理後在返回給使用者。
這時候,django採用自己的模板語言,類似jinja2,根據提供的資料,替換掉HTML中的相應部分,詳細語法入門後再深入學習。
先改造views.py檔案:
再改造index.HTML檔案:
="en">
="UTF-8">
首頁
使用者輸入:
="/index/" method="post">
{% csrf_token %}
="text" name="username" />
="password" name="password" />
="submit" value="提交" />
使用者展示:
="1">
使用者名稱
密碼
{% for line in data %}
{{ line.user }}
{{ line.pwd }}
{% endfor %}
重啟服務,重新整理瀏覽器:
可以看到,我們獲得了使用者實時輸入的資料,並將它實時展示在了使用者頁面上,這是個不錯的互動過程。
11. 使用資料庫
流程走到這裡,django的MTV框架基本已經浮出水面了,只剩下最後的資料庫部分了。
上面我們雖然和使用者互動得很好,但並沒有儲存任何資料,頁面一旦關閉,或伺服器重啟,一切都將回到原始狀態。
使用資料庫是毫無疑問的,django通過自帶的ORM框架操作資料庫,並且自帶輕量級的sqlite3資料庫。下面我們來看一看:
首先是註冊app:
不註冊它,你的資料庫就不知道該給哪個app建立表。
然後我們在settings中,配置資料庫相關的引數,如果使用自帶的sqlite,不需要修改。
再編輯models.py檔案,也就是MTV中的M。
這裡我們建立了2個欄位,分別儲存使用者的名字和密碼。
接下來要在pycharm的teminal中通過命令建立資料庫的表了。有2條命令,分別是:
Python manage.py makemigrations
再輸入命令:Python manage.py migrate
修改views.py中的業務邏輯
重啟web服務後,重新整理瀏覽器頁面,之後和使用者互動的資料都能儲存到資料庫中。任何時候都可以從資料庫中讀取資料,展示到頁面上。
至此,一個要素齊全,主體框架展示清晰的Django專案完成了,其實很簡單是不是?
三、 Django總結
作為Python必學web框架的Django,它的功能強大,內容全面,但同時也意味著限制頗多,靈活性低,可修改性差,這就是魚和熊掌不可兼得了。我們學習Django,其實就是學習一個軟體,要理解它的基本原理,把握它整體框架,牢記一些基本規則,剩下的就是不斷深入細節,然後熟能生巧、經驗多少的問題了,不存在多高深的不可掌握技術。
關於學習方法的建議:學習任何東西,不要直接扎入細節,應該先了解它的外圍知識,看看它的整體架構,再學習它的基本內容,然後才是深入學習,打磨技巧!
全文完,有不對之處懇請指正,覺得不錯,就點贊支援一下。
文末知識點摘要:Python入門後再看點什麼好?
不止一次在頭條、微信、知乎有讀者朋友跑過來問:看完了基礎書,甚至看兩遍了,但自己寫的時候還是沒思路,我該怎麼辦?
程式設計在我看來就是一門手藝活,絕不是簡單通過看書就能學會的,跟學游泳、學車、學鋼琴一個道理,沒別的,掌握了最基本的理論之後就是幹,只有通過大量的練習、實戰才能掌握程式設計這門技能,之後再回過來頭來繼續深入理論
這個問題在知識星球也同樣被問題,於是在那裡我們設了每日一題的專題,每週會出三道題給大家,做完之後要求提交到 GitHub,我會統一對程式碼進行 review。這些題一般都是出自於一些真實應用場景,通過這種方式來提高程式設計水平。
下面這道題我們在星球中的第三題,在你往下翻之前,不妨梳理下你的程式設計思路。
題目:
統計一個檔案中每個單詞出現的次數,列出出現頻率最多的5個單詞。
前言:
這道題在實際應用場景中使用比較廣泛,記得哪裡看到說李笑來就利用他的程式設計技能出版過一本背單詞的暢銷書,統計歷年來四六級、托福考試中出現的高頻詞彙,學生根據詞頻來記單詞,這種方式深受大家喜歡。這就是一個把程式設計技能用來解決實際問題的典型場景。
所以,哪怕你不是程式設計師,如果能掌握程式設計技能的話,也能給你的工作帶來極大的便利。
另外,在做資料分析時,那些詞雲效果本質上都是基於詞頻統計來控制字型的大小,如果你能熟練運用Python中的知識來解決問題的話,那說明你真正入門Python了。
分析:
本題主要考察以下幾個方面的知識點:
1、如何正確讀寫檔案
在 Python 中讀寫檔案可以使用內建函式open(),而 open 函式在python2 和 python3 中有一定的區別,比如 Python 中可以指定讀寫檔案的編碼格式,而 Python 則不可以,為了同時相容2和3,我們通常會使用io模組下面的 open 函式,大家可以查文件搞清楚它們之間的區別,培養主動學習能力和查資料的習慣。
另外一點是讀寫檔案完成之後是需要關閉檔案描述符的,除了可以使用 try...except...finally的語法之後,我們還可以使用更優雅的 with … as 的語法來自動關閉檔案。
2、如何對資料進行排序
sorted函式是一個使用頻率很高的內建函式,它的用法也很強大,因為它可以通過指定引數 key 來進行自定義排序,也就意味著你不僅可以對數字排序、對字母排序、還可以對列表、字典、自定義的物件進行排序,你只需要要告訴 sorted 函式的排序規則是什麼,比如一個people物件,我既可以根據年齡排序也可以根據身高體重來排序,所以這個函式時非常靈活的,另外,對於列表物件有自帶的 sort 方法,如果能區分清楚 list.sort 與 sorted 之間區別那說明你已經能靈活運用了。
3、匿名函式的使用
剛說了sorted函式可以指定一個引數來控制排序的規則,這個引數可以是一個函式,這種場景往往匿名函式,就是我們常說的lambda函式顯得很應景。
4、字典型別的運用
做詞頻統計,用字典無疑是最合適的資料型別,單詞作為字典的key, 單詞出現的次數作為字典的 value,很方便地就記錄好了每個單詞的頻率,字典很像我們的電話本,每個名字關聯一個電話號碼。另外,字典最大的特點就是它的查詢速度會非常快。理想情況下時間複雜度為O(1),我是說理想情況。
5、正則表示式的運用
處理文字、字串,正則表示式簡直是神器,無論是做資料爬蟲還是表單驗證使用非常廣泛,當然,正則表示式並不是 Python 特有的東西,所有程式語言都支援,我們除了學習正則表示式的基本規則之外就是Python中的re模組提供的各種函數了,只有熟悉了API 我們才能運用到實際場景中去。
以上5點,每個點都可以整理出一篇文章出來
實現:
分析完之後,我們實現起來其實是非常快的。所以我們在拿到一個需求的時候,首先肯定是把需求弄清楚,想想大概可以用哪些技術來實現,隨後才是動手寫程式碼,其實我們在工作上,真正寫程式碼的時間還不到一半。
列印結果:
總結
當然,實現方法不是唯一的。比如Python模組本身就提供了一個collections.Counter的類,它繼承自dict類,就是用於做統計的,細心的你可能發現了,我實現的這個Counter和collections下面那個Counter很像,其實這就是造輪子,造輪子可以鍛鍊我們的程式設計思維,當然在工作上有現成的東西就沒必要自己造輪子了,除非你有信心做得更好。你也可以思考假如Python沒有提供Counter這個工具,你該怎麼做。
另外,該模組還提供一個有序的字典物件 OrderedDict,使用它可以免去我們手動排序的操作。對於上面提及的知識點你是否都瞭然於心了,如果回答是的話,恭喜你,我想你應該掌握差不多了,進階吧,如果你還有很多不清楚的地方,那麼需要你更多的總結、練習。
文末福利
加小編Python學習群:943752371即可獲取Python零基礎入門學習資料!