日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

# 導入兩個數據庫類 In [1]: from assetinfo.models import ServerInfo,MiddlewareInfo# 新增一個服務信息類的對象 In [3]: s = ServerInfo()In [4]: s.server_hostname = "測試服務器"In [5]: s.server_intranet_ip = "172.16.5.1"In [6]: s.server_internet_ip = "223.5.5.5"In [7]: from datetime import dateIn [8]: s.server_shelves_date = date(2019,6,4)In [9]: s.save()# 新增一個memcached的中間件信息,關聯 服務器 s In [10]: memcached = MiddlewareInfo()In [11]: memcached.name = "memcached"In [12]: memcached.port = "11211"In [13]: memcached.server = sIn [14]: memcached.save()# 再新增一個redis的中間件信息,關聯 服務器 s In [15]: redis = MiddlewareInfo()In [16]: redis.name = "redis"In [17]: redis.port = "6379"In [18]: redis.server = sIn [19]: redis.save()

通過navicat查看已有的數據,如下:

查看數據

首先使用shell交互查詢出數據,然后寫入views中作為數據內容。

  • 查詢出一臺服務器中的所有中間件
  • 查詢中間件的信息
In [1]: from assetinfo.models import ServerInfo,MiddlewareInfoIn [22]: server_test = ServerInfo.objects.get( server_hostname = "測試服務器")In [23]: server_test.server_internet_ip Out[23]: '223.5.5.5'In [24]: m_query = MiddlewareInfo.objects.filter( server = server_test)In [25]: for row in m_query:...: print(row.name)...: memcached redisIn [26]: m_query[0].name Out[26]: 'memcached'In [27]: m_query[1].name Out[27]: 'redis'In [28]:

好了,上面已經可以關聯查詢出了測試服務器下的所有中間件。下面來寫一個查詢的表單,填寫服務器的名稱。

編寫表單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模型示例 - 查询数据,返回渲染模板数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。