寫在前面的話:對於初次接觸web框架的程序員來說,理解Django可能是一個挑戰。雖然Django真的已經做的非常好,文檔結構清晰,教程一步步由淺入深,不過對於http協議,請求&響應,web伺服器運行機制不太清楚,甚至沒有接觸過任何web框架的程序員來說,在入門Django的時候會不知道為啥我要這樣寫?希望這篇文章能幫助你。


一:什麼是Django?

官方的定義:Django是一個高級Python Web框架,鼓勵快速開發和乾淨,實用的設計。由經驗豐富的開發人員構建,它可以解決Web開發的大部分麻煩,因此您可以專註於編寫應用程序而無需重新發明輪子。它是免費和開源的。

直白的說,Django就是已經做好了你想到的(或者你還沒想到)的事情,還差「業務代碼」需要你寫,其它的,交給它吧!


二:為什麼是Django

python的web框架其實有非常多,如果按照流行程度排名,Django和Flask(估計熟悉spring的java程序員會對它一見鍾情哦)肯定是數一數二的。可是它們兩者的設計理念則完全不同。Django對程序員說,你就用我一個就夠了,我提供了所有的組件(工具)!Flask對程序員說,你用我也可以,我只提供了核心的web服務功能,其它的需要自己集成哦,如果某個組件(工具)你不喜歡,你可以隨便替換。

Django因為提供了幾乎所有web開發的組件,對初次接觸框架的程序員友好,所以這裡我們選擇Django。


三:從webpy入手Django

如果你熟悉javaEE,回想當初在學習的時候,是不是從學習servlet / JSP / javaBean 這些組件入手的?不會直接就去學習spring吧。Django因為大而全,隱藏了web開發的大部分的細節,留給程序員做的是業務邏輯「填空題」,其實對於理解整個Django不是太深刻。所以我打算從簡單的webpy入手來理解Django。

webpy是一個更簡單直接的web應用開發框架,官網傳送門(webpy.org/)。直接上例子:

#!/usr/bin/python
# --coding:utf-8--

#導入webpy的包
import web

urls = (
#映射2個地址,一個是/映射到index類,另外一個是/test映射到test類
/, index, /test, test
)

#請求 http://127.0.0.1:8080/ 顯示 hello world
class index:
def GET(self):
return "Hello, world!"

class test:

#使用curl或者post man等工具發起post請求 http://127.0.0.1:8080/test 會顯示post的內容
#例如:curl http://127.0.0.1:8080/test -X POST -d "title=test&name=test2"
def POST(self):
input = web.data()
print(input)

#請求 http://127.0.0.1:8080/test 顯示 This is test get!
def GET(self):
return "This is test get!"

if __name__ == "__main__":
# 啟動web伺服器
app = web.application(urls, globals())
app.run()

注意這個例子需要在python3.5.6的環境下運行,在3.7的環境下會報錯。程序運行起來後,已經啟動了一個web伺服器。可以通過瀏覽器127.0.0.1:8080直接打開。

仔細分析一下例子,web伺服器是由webpy來啟動的,如果不指定埠,默認是8080,程序會打開並且監聽8080埠。在程序的最開始,定義了urls的一個tuple,這個是url和處理邏輯的映射。至於是採用GET/POST方法,就直接寫在定義的函數上(注意GET/POST必須大寫!)

可以看到,我們把url路由,業務邏輯處理(當前例子沒有資料庫信息處理,有的話也可以寫上),以及請求響應都寫在同一個python文件下了。而實際上一般會使用框架(如Django),使用MVT(Model / View / Template 其實和MVC模式一樣)模式來寫代碼。這樣的好處是「解耦「,提高程序的「可擴展性」和「可維護性」,如果你還不能理解,先記住吧,這是前人總結下來的「模式」,一般不會錯。

Django包含了幾個組件:路由Route,視圖View,模版Template,模型Model。如下圖:

(圖片來源:http://www.pianshen.com/article/941753772/,侵刪)

以下是按照官網上的例子生成的項目,對照之前的圖片一起可以理解不同的組件(注意一個項目下可以包含一個或多個應用,例子中mysite這個項目包含了一個polls應用):

  • mysite/urls.py - 項目的總路由,包含各個應用的子路由路徑。admin是Django自帶的後台應用。
  • mysite/polls/models.py - polls應用的模型,定義了Question和Choice兩個類,以及一些業務處理的邏輯
  • mysite/polls/urls.py - polls應用的路由,注意命名空間和name參數需要寫上。模版中的url函數會使用。

path函數對於理解Django比較重要,可以看官網的解釋:

  • mysite/polls/views.py - polls應用的視圖。這裡的index函數,就是路由中的views.index,業務邏輯就是從資料庫中按照pub_date降序,獲取前10條記錄,放在上下文(context,一個字典),使用render函數渲染模版(頁面)。
  • mysite/polls/templates/polls/index.html

以上就是官網例子的解釋,請務必從頭到尾做一遍,體會以下MVT的設計模式,另外一個好的資源是「實驗樓」上有免費的課程可以跟著做,以下是傳送門:

Django 基礎教程_Python - 實驗樓?

www.shiyanlou.com
圖標

做完這些,對於Django就入門了,已經解決了從0到1的問題,接下來只是從1到100。加油!


推薦閱讀:
相关文章