11. 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数据
浏览器测试
11. Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据相关推荐
- Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据
参考文献 官方文档 上一篇文章讲述了Django 2.1.7 创建应用模板,基本已经理解了Django 2.1.7 框架下如何调用模板,并且渲染数据. 本篇章继续往数据库添加数据,然后查询数据,在模板 ...
- django mysql返回json_Django 1.8.11 查询数据库返回JSON格式数据
Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...
- PHP利用分组查询groupby,Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy...
Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中的一个字段并返回每个分组中的数 ...
- Django 查询数据库返回JSON格式数据
和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 返回多条数据 示例 import json from django.http import HttpResponse from dj ...
- Django MVT模型详解
MVT模型详解 ORM简介 使用MySql数据库 开发流程 使用数据库生成模型类 Model 定义模型 定义属性 字段类型 字段选项 关系 元选项 示例演示 测试数据 类的属性 管理器Manager ...
- Django框架MVT模型工作流程
Django 一.Django介绍 Django是一个开源的Web应用框架,由Python写成.采用了MTV的框架模式,它最初是被用来做CMS(内容管理系统)软件. 使用Django,程序员可以方便. ...
- Django MVT模型详解--高级
高级知识点: 管理静态文件 配置静态文件 中间件 上传图片 Admin站点 ModelAdmin对象 "操作选项"的位置 list_display list_filter list ...
- Django MVT 模型及其模块介绍
概述 最近在学习 DJango 框架,作为一个完美主义者的终极框架.虽然前面有做过一个简单的案例--DJango框架快速入门,但是对于初学者来说,往往有一种盲人摸象的感觉,尤其是像我这样做嵌入式开发而 ...
- Django框架(11.Django中的通过模型类查询数据以及相关函数和条件)
Django中的查询函数 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 不管哪个函数注意返回值的类型 函数名 功能 返回值 说明 get 返回表中满足条件的 ...
最新文章
- oracle dump 文件解析,oracle 事件转储udump文件
- LeetCode 542. 01 矩阵(BFS DP)
- Eclipse如何关闭在RUN/DEBUG时弹出窗口?
- 识别速度3.6ms/帧!人像抠图、工业质检、遥感识别,用这一个分割模型就够了...
- 【优化调度】基于matlab粒子群算法求解水火电系统经济、环境运行单目标调度优化问题【含Matlab源码 1138期】
- 向日葵远程控制第一人称3D鼠标无法操作旋转问题
- Sublime Text自定制代码片段之 快速生成html结构
- 多尺度特征的融合操作
- Python学习之学校教学(辨别身份证的真伪,并判断性别)
- 通过微信传文件在服务器保留几天,微信发送文件多久会失效
- 基于FPGA和ABZ增量式编码器的转子位置检测
- 转:用迅雷下载Android SDK全系列
- Linux识别不了希捷移动硬盘,希捷(Seagate)移动硬盘无法识别怎么办?
- 软考高级证书可以积分50分
- 【算法】常见数据结构基本算法整理
- 计算机打印途中卡住,联想打印机经典故障处理方法
- spring Cloud与它的好兄弟分布式
- 控制工程 留数法(看一遍就懂了)
- Part 2: CHAPTER 9 Consistency and Consensus
- php生成PDF文件