
 
  
  
 
上一篇Django 2.1.7 模型类 - 字段类型讲述了关于模型字段类的内容,丰富了不少模型中的字段类型。
本篇章再来改改之前的服务器中间件信息查询列表,增加添加和删除的功能。
参考文献
https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/
首先回顾一下之前项目的服务器中间件查询列表页面
 
 
  
   
  
   
 
  
  
 
好了,按照功能需求需要增加一个添加和删除的功能。
简单编写一下功能页面,有点丑,应付一下吧。
 
 
  
   
  
   
 
  
  
 
 
  
   
  
   
 
  
  
 
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>
            <!-- 添加服务器信息 -->
            <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作为删除的查询条件。
设置查询页面视图
 
 
  
   
  
   
 
  
  
 
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)修改模板的相应的渲染参数
 
 
  
   
  
   
 
  
  
 
{% 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 判断
 
 
  
   
  
   
 
  
  
 
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)编写删除视图功能
 
 
  
   
  
   
 
  
  
 
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')测试删除功能
 
 
  
   
  
   
 
  
  
 
 
  
   
  
   
 
  
  
 
成功删除了。
 
 
  
   
  
   
 
  
  
                










