Django
一、MTV和MVC的區別
首先介紹Django的設計模式,也就是MTV,在這之前我們先了解MVC模式。
1、MVC設計模式
MVC是Model-View-Controller的縮寫
- Model代表數據存儲層,是對數據表的定義和對數據的增刪改查;
- View代表視圖層,是系統前段顯示部分,它負責顯示什么和如何進行顯示;
- Controller代表控制層,負責根據從View層輸入的指令來檢索Model層的數據,并在該層編寫代碼產生結果并輸出。
![]()
MVC設計模式的請求與響應過程描述如下:
- 用戶通過瀏覽器向服務器發起request請求,Controller層接受請求后,同時向Model層和View層發送指令;
- Model層根據指令與數據庫交互并選擇相應業務數據,然后將數據發送給Controller層;
- View層接收到Controller的指令后,加載用戶請求的頁面,并將此頁面發送給Controller層
- Controller層接收到Model層和View層的數據后,將它們組織成響應格式發送給瀏覽器,瀏覽器通過解析后把頁面展示出來
MVC的3層之間緊密相連,但又相互獨立,每一層的修改都不會影響其他層,每一層都提供了各自獨立的接口供其他層調用,MVC的設計模式降低了代碼之間的關聯性,增加了模塊的可重用性,這就是MVC的設計模式。
2、MTV設計模式
- Model:數據存儲層,處理所有數據相關的業務,和數據庫進行交互,并提供數據的增刪改查;
- Template:模版層具體來處理頁面的顯示;
- View:業務邏輯層,處理具體的業務邏輯,它的作用是連通Model層和Template。
![]()
MTV設計模式的請求與響應過程的描述:
- 用戶通過瀏覽器對服務器發起request請求,服務器接收請求后,通過View的業務邏輯層進行分析,同時向Model層和Template層發送指令;
- Model層與數據庫進行交互,將數據返回給View層;
- Template層接收到指令后,調用相應的模版,并返回給View層;
- View層接收到模版與數據后,首先對模版進行渲染(即將相應的數據賦值給模版),然后組織成響應格式返回給瀏覽器,瀏覽器進行解析后最終呈現給用戶。
二、Django模塊講解
1、ORM
ORM即對象關系映射,它是一種基于關系型數據庫的程序技術。ORM允許使用類和對象對數據庫進行操作。
Web開發中對數據庫的操作是必不可少的,然而每種數據庫的操作方式以及用法不盡相同。由于Django中ORM的存在,為我們操作不同種類的數據庫提供了統一的方法,ORM適配了多種常用的關系型數據庫。
ORM把類映射成數據庫中的表,把類的一個實例對象映射成數據庫中的數據行,把類的屬性映射成表中的字段,通過對象的操作對應到數據庫表的操作,實現了對象到SQL、SQL到對象轉換過程。
Django把表模型定義為Model,他需要繼承自django.db.models中的Model類,只要與數據表相關的操作,都需要繼承這個類,同時ORM對于數據庫的增刪改查,也提供了一些簡單的API,例如F查詢等
2、Django中定義數據表
在創建好APP后
1、模型類
模型類本質上屬于一個python類,只不過在Django中稱之為模型類,它是由 django.db.models.Model 派生出來的子類,在Django中模型類是數據交互的接口,一個模型類代表數據庫中的一張數據表,模型類中每一個類屬性都代表數據表中的一個字段。
2、定義數據表
from django.db import models
class User(models.Model):
username = models.CharField(max_length=20)
password = models.IntegerField()
email = models.EmailField()
通過上述代碼,一張用戶數據表就創建完成了。
1、使用django包導入models模塊;
2、使用class關鍵字對User表進行類定義,并繼承models模塊中的Models類;
3、上述數據表定義了用戶姓名、密碼和郵箱三種屬性
3、ORM管理器對象
首先,大家需要知道每個繼承 models.Model 的模型類,都會有一個objects對象被同時繼承下來。這個對象就叫作“管理器對象”,數據庫的增刪改查可以用objects管理器對象來實現。
①:create插入數據
User.objects.create(username="Tom",password="root",email="wjx9669@qq.com")
②:創建實例對象,然后調用save()方法保存
Obj=User(username="Tom",password="root",email="wjx9669@qq.com")
Obj.name='Harry'
Obj.save()
對數據進行增刪改查操作:
User.objects,all()#查詢表中的所有記錄
User.objects.filter(username_contains="T")#查詢表中name含有“T”的所有記錄
User.objects.get(username="Tom")#有且只有一個查詢結果
User.objects.get(username="Tom").delete()#刪除名字為Tom的記錄
User.objects.get(username="Tom").update(username="Harry")#更新數據表的用戶名為Harry
2、auth模塊
3、Django Admin后臺管理系統
4、Django視圖函數
? 在Django中,視圖函數是一個python函數或者類,開發者主要通過編寫視圖函數來實現業務邏輯。視圖函數首先接受來自瀏覽器或者客戶端請求,并最終返回響應,視圖函數返回的響應可以是HTML文件,也可以是HTTP協議中的303重定向。
from django.http import HttpResponse
def dgango(request):
return HttpResponse('人生苦短,我學python!')
1)HttpResponse視圖響應類型
它是一種視圖的響應類型。
2)視圖函數參數request
Django規定,視圖函數至少有一個參數,第一個參數必須是request,request是HttpResponse請求類型的對象,它攜帶了瀏覽器的請求信息,所以視圖函數的第一個參數必須為request。
3)return視圖響應
視圖函數要返回響應內容,它被作為HttpResponse的對象返回給瀏覽器。
5、Django 模版系統
在 Django中我們把“模版”稱之為Template,它的存在使得HTML和View視圖層實現了解耦。當創建好一個Django項目后,會在項目的同級目錄下創建一個template文件夾,對它進行簡單的配置后,這個文件夾被Django自動識別。一般,我們會在Template文件夾里寫HTML代碼,用來作為響應內容。
1)模版傳參
在HTML代碼中可以使用變量并且可以進行傳參,視圖函數必須把數據形成字典的形式才可以傳遞給模版。
2)render方法
render是view層加載模版的一種方式,它封裝在django.shortcuts模塊中,render方法使用起來非常方便,它首先加載模版,然后將加載完成的模版響應給瀏覽器。
三、系統講解
1、Django路由系統應用
Django中利用ROOT_URLCONF構建了URL與視圖函數的映射關系。在django.conf.urls中封裝了路由模塊,新建的Django項目中提供了urls.py路由配置文件,urls.py文件中定義了一個urlpatterns的列表,它是由url()實例對象組成的列表。
2、Django 中間件
中間件作為一個可插拔的組件對外提供服務,每個中間件都負責完成一些特定的功能。
中間件是介于request與response之間的一道處理過程,相對比較輕量級。
3、Django Cache緩存系統
緩存是指保存一些計算開銷較大的數據,可以是某個網頁,也可以是網頁的一部分,或者僅僅只是格式化的數據,合理運用緩存技術可以減少數據庫訪問次數。