Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据
參考文獻
官方文檔
上一篇文章講述了Django 2.1.7 創建應用模板,基本已經理解了Django 2.1.7 框架下如何調用模板,并且渲染數據。
本篇章繼續往數據庫添加數據,然后查詢數據,在模板中渲染出來。
在此之前,先來理解一些概念。
MVC簡介
MVC的全拼為Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件設計模式,是為了將傳統的輸入(input)、處理(processing)、輸出(output)任務運用到圖形化用戶交互模型中而設計的。隨著標準輸入輸出設備的出現,開發人員只需要將精力集中在業務邏輯的分析與實現上。后來被推薦為Oracle旗下Sun公司Java EE平臺的設計模式,并且受到越來越多的使用ColdFusion和PHP的開發者的歡迎。現在雖然不再使用原來的分工方式,但是這種分工的思想被沿用下來,廣泛應用于軟件工程中,是一種典型并且應用廣泛的軟件架構模式。后來,MVC的思想被應用在了Web開發方面,被稱為Web MVC框架。
MVC框架的核心思想是:解耦,讓不同的代碼塊之間降低耦合,增強代碼的可擴展性和可移植性,實現向后兼容。
當前主流的開發語言如Java、PHP、Python中都有MVC框架。
Web MVC各部分的功能
M全拼為Model,主要封裝對數據庫層的訪問,對數據庫中的數據進行增、刪、改、查操作。
V全拼為View,用于封裝結果,生成頁面展示的html內容。
C全拼為Controller,用于接收請求,處理業務邏輯,與Model和View交互,返回結果。
Django簡介
Django,發音為[`d???ɡ??],是用python語言寫的開源web開發框架,并遵循MVC設計。勞倫斯出版集團為了開發以新聞內容為主的網站,而開發出來了這個框架,于2005年7月在BSD許可證下發布。這個名稱來源于比利時的爵士音樂家DjangoReinhardt,他是一個吉普賽人,主要以演奏吉它為主,還演奏過小提琴等。由于Django在近年來的迅速發展,應用越來越廣泛,被著名IT開發雜志SDTimes評選為2013SDTimes100,位列"API、庫和框架"分類第6位,被認為是該領域的佼佼者。Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼復用,多個組件可以很方便的以"插件"形式服務于整個框架,Django有許多功能強大的第三方插件,你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。
Django框架遵循MVC設計,并且有一個專有名詞:MVT
MVT各部分的功能
M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。
V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。
T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html。
- 差異就在于黑線黑箭頭標識出來的部分
理解了上面這些概念之后,下面來講述一下MVT的執行步驟:
- 1、url 請求至 view,查詢出資產管理系統中的某服務器的所有中間件信息
- 2、view接收請求之后,往model發出數據查詢,model與數據庫交互,并返回數據
- 3、view將model返回的數據提供給template進行渲染,并將渲染好的template返回瀏覽器
插入數據至數據庫中
在執行之前,首先需要插入數據,如果不清楚數據庫模型操作的,可以參見我前面的文章Django 2.1.7 基于默認sqlite3 模型設計 以及 數據操作。
確認之前寫的數據類,明確字段,如下:
class ServerInfo(models.Model):server_hostname = models.CharField(max_length=20, default=None)server_intranet_ip = models.CharField(max_length=20, default=None)server_internet_ip = models.CharField(max_length=20, default=None)server_shelves_date = models.DateField(auto_now_add=True)# 中間件類:MiddlewareInfo # 中間件名稱: name # 中間件端口號:port # 中間件所屬服務器:server class MiddlewareInfo(models.Model):name = models.CharField(max_length=20)port = models.IntegerField()server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None)下面開始添加數據,如下:
python3 manage.py shell
通過navicat查看已有的數據,如下:
查看數據
首先使用shell交互查詢出數據,然后寫入views中作為數據內容。
- 查詢出一臺服務器中的所有中間件
- 查詢中間件的信息
好了,上面已經可以關聯查詢出了測試服務器下的所有中間件。下面來寫一個查詢的表單,填寫服務器的名稱。
編寫表單html
<!DOCTYPE html> <html> <head><title></title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"><script type="text/javascript" src="js/jquery-3.0.0.min.js"></script><script type="text/javascript" src="js/popper.min.js"></script><script type="text/javascript" src="js/bootstrap.min.js"></script> </head> <body><div class="container"><!-- 查詢服務器信息表單 --><div class="row mt-5"><form class="form-inline" method="POST" action="handler"><div class="form-group mb-2"><label for="serverinfo" class="sr-only">服務器信息</label><input type="text" readonly class="form-control-plaintext" id="serverinfo" value="服務器信息"></div><div class="form-group mx-sm-3 mb-2"><label for="inputPassword2" class="sr-only">服務器名稱</label><input type="text" class="form-control" id="servername" placeholder="服務器名稱"></div><button type="submit" class="btn btn-primary mb-2">查詢</button></form></div><!-- 顯示中間件信息表格 --><div class="row mt-5"><table class="table"><thead><tr><th scope="col">#</th><th scope="col">服務器名稱</th><th scope="col">中間件名稱</th><th scope="col">端口號</th></tr></thead><tbody><tr><th scope="row">1</th><td>測試服務器</td><td>redis</td><td>6379</td></tr><tr><th scope="row">2</th><td>測試服務器</td><td>memcached</td><td>11211</td></tr><tr><th scope="row">3</th><td>測試服務器</td><td>kafka</td><td>9092</td></tr></tbody></table></div></div> </body> </html>好了,將這個html放入模板文件中,然后先用視圖顯示出來看看。
放入模板文件后,主要要設置好 static 文件的引入。
編寫視圖返回 serverinfo.html
def serverinfo(request):return render(request,'assetinfo/serverinfo.html')然后配置一下url,如下:
在瀏覽器測試一下看看,如下:
好了,最后剩下的工作就是在html上修改模板參數化,然后從model中渲染數據。
配置html模板參數化
編寫視圖查詢model數據
瀏覽器測試
總結
以上是生活随笔為你收集整理的Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 通讯录管理系统
- 下一篇: webkit-scrollbar应用