Django-mtv開發模式


從著名的MVC模式開始說起

所謂的MVC就是把Web應用分為模型(M)控制器(C)和視圖(V)三層,他們之間以一種插件式的、松耦合的房還是
連接在一起,模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互頁面(頁面),控制器接受用戶輸入條
用模型和視圖完成用戶的請求,其示意圖如下所示:

django的MTV模式的本質和MVC是一樣的,也是為了各組件間保持松耦合關系,只是定義有些不同,django的mtv分別是

  1. M 帶包模型(Model) 負責業務對象和數據庫的關系映射(ORM)
  2. T 代表模板(Template) 負責如何把頁面展示給用戶(html)
  3. V 代表視圖 (View) 負責業務邏輯 並在適當時候調用Mode和Template
  4. 出了以上三層外,還需要一個URL分發器、他的作用是講一個個URL的頁面請求分發給不同的View處理,

View在調用相關的Mode和Template,MTV的相應模式如下所示:

  1. web服務器(中間件)收到一個http請求
  2. Django在URLconf里查找對應的視圖(view)函數來處理http請求
  3. 視圖函數調用相應的數據模型來存儲數據、調用相應的模板向用戶展示頁面
  4. 視圖函數處理結束后返回一個http的相應給web服務器
  5. web 服務器將響應發送給客戶端

這種設計模式關鍵的優勢在與各種組都是松耦合的額,這樣,每個有django驅動的web應用都有 着明確的目的,並且可獨立更改而不影響其他的部分。 比如,開發者更改一個應用程序的URL而不用影響到這個程序底層的實現。設計師可以更改HTML頁面 的樣式而不用接觸python代碼 數據庫管理員可以重新命名數據庫表並且只需要更改模型,無需從一大堆文件中進行查找和替換。

落實到實處 django的MTV模式相對應的python文件如下:

urls.py詳解

URl分發器 (路由配置文件)

URL配置(URLconf)就像django所支持網站的目錄。它在本質是URL模式以及要為改URL 模式調用的視圖函數之間的映射表。你就是這種方式告訴django,對於這個URL嗲用這段代碼, 對於那個URL調用那段代碼,URL的加載時從配置文件中開始。

1. urlpatterns 的兩種形式

沒有前綴的情況,使用的列表(推薦方式) urlpatterns = [ url(r'^hello/$', views.hello), ] 有前綴的情況,使用patterns過時的方法方法

from django.conf.urls import url,patterns
from hello import views
urlpatterns = patterns('',url(r'^hello/$', views.hello))
或
from django.conf.urls import patterns
urlpatterns = patterns('hello',url(r'^hello/$', 'views.hello'),)

2. URL模式

urlpatterns =[
    url(正則表方式,view函數,參數,別名,前綴)
]

參數說明:

  • 一個正則表達式字符串
  • 一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串。
  • 可選的要傳遞給視圖函數的默認參數(字典形式)
  • 一個可選的name參數
  • 路徑前綴

3 URL 分解器 include函數

通常一個URL分解器對應一個URL配置模塊,他可以包含多個url模式, 也可以包含多個其他URL分解器,通過這種包含結構設計,實現django對URL的層級解析。

URL分解器是django實現app與項目解耦的關鍵,通常include方法操作的url配置模塊,最終 會被解釋成URL分解器

預留的問題,為什么admin模塊引入的時候沒有使用include

url(r'^admin/', admin.site.urls),

URL常見寫法示例 正則表達式

url(r'^test/\d{2}/$',views.test)
url(r'^test/(?P<id>\d{2})/$',views.test) ===>test(id)
url(r'^test2/(?P<id>\d{2})/(?P<key>\w+)/$',views.test) ==》test(id,key)

關於正則表達式的使用可以參考 建議爬蟲實戰中的正則表達式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM