前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14. Django 2.1.7 模型 - MVT模型增删功能

14. Django 2.1.7 模型 - MVT模型增删功能

作者头像
Devops海洋的渔夫
发布2022-01-17 10:00:07
2990
发布2022-01-17 10:00:07
举报
文章被收录于专栏:Devops专栏

上一篇Django 2.1.7 模型类 - 字段类型讲述了关于模型字段类的内容,丰富了不少模型中的字段类型。

本篇章再来改改之前的服务器中间件信息查询列表,增加添加删除的功能。

参考文献

https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/

首先回顾一下之前项目的服务器中间件查询列表页面

好了,按照功能需求需要增加一个添加删除的功能。

简单编写一下功能页面,有点丑,应付一下吧。

HTML代码如下:

代码语言:javascript
复制
<!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>
			<!-- 添加服务器信息 -->
			<a class="btn btn-primary mb-2 ml-2" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
				添加中间件信息
			</a>
			<div class="collapse" id="collapseExample">
			  <div class="card card-body">
			  	<!-- 提交中间件信息表单 -->
			    <form method="POST" action="addmiddlewareinfo">
				  <div class="form-group">
				    <label for="servername1">服务器名称</label>
				    <input type="text" class="form-control" id="servername1" aria-describedby="serverHelp" placeholder="Enter server name">
				    <small id="emailHelp" class="form-text text-muted">输入中间件所属的服务器名称.</small>
				  </div>
				  <div class="form-group">
				    <label for="midname1">中间件名称</label>
				    <input type="text" class="form-control" id="midname1" placeholder="middleware name">
				  </div>
				  <div class="form-group">
				    <label for="midport1">中间件端口号</label>
				    <input type="text" class="form-control" id="midport1" placeholder="middleware port">
				  </div>
				  <button type="submit" class="btn btn-outline-primary">添加</button>
				</form>
			  </div>
			</div>
		</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>
			      <th scope="col">#</th>
			    </tr>
			  </thead>
			  <tbody>
			    <tr>
			      <th scope="row">1</th>
			      <td>测试服务器</td>
			      <td>redis</td>
			      <td>6379</td>
			      <td><a href="deleteMiddlewareinfo?id=1" class="btn btn-outline-primary">删除</a></td>
			    </tr>
			    <tr>
			      <th scope="row">2</th>
			      <td>测试服务器</td>
			      <td>memcached</td>
			      <td>11211</td>
			      <td><a href="deleteMiddlewareinfo?id=1" class="btn btn-outline-primary">删除</a></td>
			    </tr>
			    <tr>
			      <th scope="row">3</th>
			      <td>测试服务器</td>
			      <td>kafka</td>
			      <td>9092</td>
			      <td><a href="deleteMiddlewareinfo?id=1" class="btn btn-outline-primary">删除</a></td>
			    </tr>
			  </tbody>
			</table>
		</div>
	</div>
</body>
</html>

有了基本的静态页面之后,下面就是将这个页面的效果设置到Django的模板之中。然后用视图查询model数据获取展示效果。

将静态HTML设置模板

其他地方基本复制静态文件即可,然后对循环渲染的部分进行参数化delete操作,传送id作为删除的查询条件。

设置查询页面视图

代码语言:javascript
复制
def serverinfo(request):
    # 1、查询所有服务器的信息
    server_list = ServerInfo.objects.all()
    # 2、查询所有服务器的中间件信息
    info_list = []
    for server in server_list:
        # print(server.server_hostname)
        m_query = MiddlewareInfo.objects.filter(server=server)
        info_item = {"server_name": server.server_hostname, 'm_query': m_query}
        info_list.append(info_item)
    # 3、设置context内容
    context = {
        "info_list": info_list
    }
    # print(context)
    return render(request,'assetinfo/serverinfo.html', context=context)

修改模板的相应的渲染参数

代码语言:javascript
复制
{% for info in info_list %}

   {% for value in info.m_query %}
   <tr>
     <th scope="row">{{ value.id }}</th>
     <td>{{ info.server_name }}</td>
     <td>{{ value.name }}</td>
     <td>{{ value.port }}</td>
     <td><a href="deleteMiddlewareinfo?id={{ value.id }}" class="btn btn-outline-primary">删除</a></td>
  </tr>
  {% endfor %}

{% endfor %}

浏览器访问效果如下

下面来编写添加中间件信息的功能。

主要分为三个步骤: 1、设置模板传递的参数 2、编写视图接收参数 3、往数据库插入数据 4、返回页面

编写视图url路径

编写视图内容

接收表单传递过来的参数,然后查询服务器信息,再插入中间件信息。 最后返回serverinfo页面。

浏览器执行效果如下

好了,增加功能已经有了。下面就要开始来编写删除功能了。

删除功能的实现步骤

目前查询列表是没有判断数据是否删除的,也就是没有is_delete字段的判断。 实现步骤如下:

  • 在serverinfo视图增加 is_delete 的判断。
  • 编写删除功能视图
  • 删除数据后返回页面

在serverinfo视图增加 is_delete 判断

代码语言:javascript
复制
def serverinfo(request):
    # 1、查询所有服务器的信息
    server_list = ServerInfo.objects.all()
    # 2、查询所有服务器的中间件信息
    info_list = []
    for server in server_list:
        # print(server.server_hostname)
        m_query = MiddlewareInfo.objects.filter(server=server)

        mid_info_list = []
        for i in range(0,len(m_query)):
            # print("is_delete = ", m_query[i].is_delete)
            if m_query[i].is_delete == False:
                mid_info_list.append(m_query[i])

        info_item = {"server_name": server.server_hostname, 'm_query': mid_info_list}
        info_list.append(info_item)
    # 3、设置context内容
    context = {
        "info_list": info_list
    }
    # print(context)
    return render(request,'assetinfo/serverinfo.html', context=context)

编写删除视图功能

代码语言:javascript
复制
def deleteMiddlewareinfo(request):
    # 1、接收需要删除中间件的id
    mid_id = request.GET.get('id','')
    # 2、根据id设置中间件的is_delete = True
    mid_ware = MiddlewareInfo.objects.get( id = mid_id )
    mid_ware.is_delete = True
    mid_ware.save()
    # return HttpResponse(mid_id)
    return redirect('/assetinfo/serverinfo')

测试删除功能

成功删除了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
  • 首先回顾一下之前项目的服务器中间件查询列表页面
  • 简单编写一下功能页面,有点丑,应付一下吧。
  • 将静态HTML设置模板
  • 设置查询页面视图
  • 修改模板的相应的渲染参数
  • 浏览器访问效果如下
  • 编写视图url路径
  • 编写视图内容
  • 浏览器执行效果如下
  • 删除功能的实现步骤
    • 在serverinfo视图增加 is_delete 判断
      • 编写删除视图功能
        • 测试删除功能
        相关产品与服务
        消息队列 TDMQ
        消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档