• 【IMU_Ops】------V------ IMU自动化运维平台之CMDB(前端)


    说明
    本文中所有内容仅作为学习使用,请勿用于任何商业用途。
    本文为原创,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。

      上一章节完成CMDB的资产新增和更新,本章节主要是完成IMU平台及CMDB的展示界面。

     #A 前端框架

      我这边其实对前端不是很了解,只是看了很多论坛和博客之后觉得AdminLTE比较容易上手。所以IMU暂时先用AdminLTE来做前端展示,待后期有能力做前后端分离了再考虑用其他的框架。AdminLTE托管在GitHub上的,访问地址:https://github.com/ColorlibHQ/AdminLTE/releases 。AdminLTE是一个完全响应管理模板。基于Bootstrap3,jQuery 3.3.1 这两个框架框架,易定制模板。适合多种屏幕分辨率,从小型移动设备到大型台式机。内置了多个页面,包括仪表盘、邮箱、日历、锁屏、登录及注册、404错误、500错误等页面。对于后台站点的模板渲染,有很大的作用。

      我这边就用最新版本3.0.1好了,下载解压就不在赘述了。下面我们简单看下最新的AdminLTE的结构:

    1. build: 编译前的源文件目录(包含未编译的 CSS、JS 文件)
    2. dist:编译后的静态资源目录(包含已编译的 CSS、JS 文件),同时还提供压缩版本(.min的文件)
    3. pages:目录下是一些示例页面
    4. plugins:目录存放依赖的插件
    5. starter.html :是 AdminLTE 建议用来作为起点的参考示例
    6. index.html:是AdminLTE中比较完善的展示品,用于参考、借鉴。

     #B 创建模板

      接下来就是创建模板的过程,首先我们需要在settings文件中声明要使用静态文件。可以在settings文件的末尾加上一下代码: 

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static")
    ]
    

      这里考虑到工程今后的可扩展性,我在整个工程的目录中创建一个公共的目录命名为“static”,今后各个功能模块需要的静态文件都来这个目录下加载即可。这样也便于后期的升级和管理。

      接下来新建static目录,并将AdminLTE解压出来的plugins和dist两个文件夹拷贝至static。然后在工程中再新建一个名为templates的目录,这里用来创建我们工程相关的模板。同时检查settings文件中关于模板的配置是否正确,这里我贴出配置好的templates相关代码:

     1 TEMPLATES = [
     2     {
     3         'BACKEND': 'django.template.backends.django.DjangoTemplates',
     4         'DIRS': [os.path.join(BASE_DIR, 'templates')],
     5         'APP_DIRS': True,
     6         'OPTIONS': {
     7             'context_processors': [
     8                 'django.template.context_processors.debug',
     9                 'django.template.context_processors.request',
    10                 'django.contrib.auth.context_processors.auth',
    11                 'django.contrib.messages.context_processors.messages',
    12             ],
    13         },
    14     },
    15 ]
    templates

      然后在templates目录中新建一个base.html,作为我们整个工程的基础模板。同时我们将AdminLTE目录中的starter.html中的代码拷贝至base.html中,然后再修改。目前官方只有2.4的文档,3.0.1暂时还没有官方文档,因此浪费了我不少的时间。修改的地方比较多不过我都有注释,下面我就直接把修改好的代码贴出来吧。

       感觉不够完美还在调试中。。。。。忙了几天其他的事情今天算是把首页调测的差不多了,先这样吧后期慢慢再调整。还请大家不要吐槽,撸代码和前端真的都不是我的强项(2020-1-14)  

      1 {%  load static %}
      2 <!DOCTYPE html>
      3 <!--
      4 This is a starter template page. Use this page to start your new project from
      5 scratch. This page gets rid of all links and provides the needed markup only.
      6 -->
      7 <html lang="en">
      8 <head>
      9   <meta charset="utf-8">
     10   <!-- Tell the browser to be responsive to screen width -->
     11   <meta name="viewport" content="width=device-width, initial-scale=1">
     12   <meta http-equiv="x-ua-compatible" content="ie=edge">
     13 
     14   <title>{%  block IMU_DevOps %}IMU_BASE{% endblock %}</title>
     15 
     16   <!-- Font Awesome Icons -->
     17   <link rel="stylesheet" href="{% static 'AdminLet/plugins/fontawesome-free/css/all.min.css' %}">
     18   <!-- Theme style -->
     19   <link rel="stylesheet" href="{% static 'AdminLet/dist/css/adminlte.min.css' %}">
     20   <!-- Google Font: Source Sans Pro -->
     21   <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
     22 </head>
     23 <body class="hold-transition sidebar-mini">
     24 <div class="wrapper">
     25 
     26   <!-- Navbar(导航栏) -->
     27   <nav class="main-header navbar navbar-expand navbar-default navbar-light">
     28     <!-- Left navbar links (顶部左侧导航栏)-->
     29     <ul class="navbar-nav">
     30       <li class="nav-item">
     31         <a class="nav-link" data-widget="pushmenu" href="#"><i class="fas fa-bars"></i></a>
     32       </li>
     33       <li class="nav-item d-none d-sm-inline-block">
     34         <a href="#" class="nav-link">首页</a>
     35       </li>
     36       <li class="nav-item d-none d-sm-inline-block">
     37         <a href="#" class="nav-link">联系</a>
     38       </li>
     39       <li class="nav-item dropdown">
     40         <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     41           帮助
     42         </a>
     43         <div class="dropdown-menu" aria-labelledby="navbarDropdown">
     44           <a class="dropdown-item" href="#">FAQ</a>
     45           <a class="dropdown-item" href="#">Support</a>
     46           <div class="dropdown-divider"></div>
     47           <a class="dropdown-item" href="#">Contact</a>
     48         </div>
     49       </li>
     50     </ul>
     51 
     52     <!-- SEARCH FORM (搜索)-->
     53     <form class="form-inline ml-3">
     54       <div class="input-group input-group-sm">
     55         <input class="form-control form-control-navbar" type="search" placeholder="搜索" aria-label="Search">
     56         <div class="input-group-append">
     57           <button class="btn btn-navbar" type="submit">
     58             <i class="fas fa-search"></i>
     59           </button>
     60         </div>
     61       </div>
     62     </form>
     63 
     64     <!-- Right navbar links(右侧导航栏相关) -->
     65     <ul class="navbar-nav ml-auto">
     66       <!-- Messages Dropdown Menu (消息下拉菜单)-->
     67       <li class="nav-item dropdown">
     68         <a class="nav-link" data-toggle="dropdown" href="#">
     69           <i class="far fa-comments"></i>
     70           <span class="badge badge-danger navbar-badge">6</span>
     71         </a>
     72         <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
     73           <a href="#" class="dropdown-item">
     74             <!-- Message Start -->
     75             <div class="media">
     76               <img src="{% static 'AdminLet/dist/img/user1-128x128.jpg' %}" alt="User Avatar" class="img-size-50 mr-3 img-circle">
     77               <div class="media-body">
     78                 <h3 class="dropdown-item-title">
     79                   张三
     80                   <span class="float-right text-sm text-danger"><i class="fas fa-star"></i></span>
     81                 </h3>
     82                 <p class="text-sm">尽快给我回电话</p>
     83                 <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
     84               </div>
     85             </div>
     86             <!-- Message End -->
     87           </a>
     88           <div class="dropdown-divider"></div>
     89           <a href="#" class="dropdown-item">
     90             <!-- Message Start -->
     91             <div class="media">
     92               <img src="{% static 'AdminLet/dist/img/user7-128x128.jpg' %}" alt="User Avatar" class="img-size-50 img-circle mr-3">
     93               <div class="media-body">
     94                 <h3 class="dropdown-item-title">
     95                   李四
     96                   <span class="float-right text-sm text-muted"><i class="fas fa-star"></i></span>
     97                 </h3>
     98                 <p class="text-sm">信息已收到</p>
     99                 <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 2 Hours Ago</p>
    100               </div>
    101             </div>
    102             <!-- Message End -->
    103           </a>
    104           <div class="dropdown-divider"></div>
    105           <a href="#" class="dropdown-item">
    106             <!-- Message Start -->
    107             <div class="media">
    108               <img src="{% static 'AdminLet/dist/img/user6-128x128.jpg' %}" alt="User Avatar" class="img-size-50 img-circle mr-3">
    109               <div class="media-body">
    110                 <h3 class="dropdown-item-title">
    111                   王二
    112                   <span class="float-right text-sm text-warning"><i class="fas fa-star"></i></span>
    113                 </h3>
    114                 <p class="text-sm">IMU上线成功</p>
    115                 <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 1 Hours Ago</p>
    116               </div>
    117             </div>
    118             <!-- Message End -->
    119           </a>
    120           <div class="dropdown-divider"></div>
    121           <a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
    122         </div>
    123       </li>
    124       <!-- Notifications Dropdown Menu(通知下拉菜单) -->
    125       <li class="nav-item dropdown">
    126         <a class="nav-link" data-toggle="dropdown" href="#">
    127           <i class="far fa-bell"></i>
    128           <span class="badge badge-warning navbar-badge">13</span>
    129         </a>
    130         <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
    131           <span class="dropdown-header">13 个通知</span>
    132           <div class="dropdown-divider"></div>
    133           <a href="#" class="dropdown-item">
    134             <i class="fas fa-envelope mr-2"></i> 4 个新消息
    135             <span class="float-right text-muted text-sm">3 mins</span>
    136           </a>
    137           <div class="dropdown-divider"></div>
    138           <a href="#" class="dropdown-item">
    139             <i class="fas fa-users mr-2"></i> 7 新资产待审批
    140             <span class="float-right text-muted text-sm">12 hours</span>
    141           </a>
    142           <div class="dropdown-divider"></div>
    143           <a href="#" class="dropdown-item">
    144             <i class="fas fa-file mr-2"></i> 2 上线通知
    145             <span class="float-right text-muted text-sm">2 days</span>
    146           </a>
    147           <div class="dropdown-divider"></div>
    148           <a href="#" class="dropdown-item dropdown-footer">查看所有通知</a>
    149         </div>
    150       </li>
    151       <li class="nav-item">
    152         <a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#"><i
    153             class="fas fa-th-large"></i></a>
    154       </li>
    155     </ul>
    156   </nav>
    157   <!-- /.navbar -->
    158 
    159   <!-- Main Sidebar Container(最左侧主边栏导航) -->
    160   <aside class="main-sidebar sidebar-light-gray elevation-3">
    161     <!-- Brand Logo -->
    162     <a href="#" class="brand-link">
    163       <img src="{% static 'AdminLet/dist/img/online Marketing-21.png' %}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3"
    164            style="opacity: .8">
    165       <span class="brand-text font-weight-bold">I·M·U</span>
    166     </a>
    167 
    168     <!-- Sidebar -->
    169     <div class="sidebar">
    170       <!-- Sidebar user panel (用户面板) -->
    171       <div class="user-panel">
    172         <div class="fa-pull-left image">
    173           <img src="{% static 'AdminLet/dist/img/user2-160x160.jpg' %}" class="img-circle" alt="User Image">
    174         </div>
    175         <div class="fa-pull-left info">
    176             <a href="#">F0rGeEk <i class="fa fa-circle text-success"></i></a>
    177         </div>
    178       </div>
    179 
    180       <!-- Sidebar Menu -->
    181       <nav class="mt-2">
    182         <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
    183           <!-- Add icons to the links using the .nav-icon class
    184                with font-awesome or any other icon font library -->
    185           <li class="nav-item has-treeview ">
    186             <a href="#" class="nav-link ">
    187               <i class="nav-icon fas fa-tachometer-alt"></i>
    188               <p>
    189                 资产总览
    190                 <i class="right fas fa-angle-left"></i>
    191               </p>
    192             </a>
    193             <ul class="nav nav-treeview">
    194               <li class="nav-item">
    195                 <a href="#" class="nav-link ">
    196                   <i class="far fa-circle nav-icon"></i>
    197                   <p>资产仪表</p>
    198                 </a>
    199               </li>
    200               <li class="nav-item">
    201                 <a href="#" class="nav-link">
    202                   <i class="far fa-circle nav-icon"></i>
    203                   <p>资产总览</p>
    204                 </a>
    205               </li>
    206               <li class="nav-item">
    207                 <a href="#" class="nav-link">
    208                   <i class="far fa-circle nav-icon"></i>
    209                   <p>资产查找</p>
    210                 </a>
    211               </li>
    212             </ul>
    213           </li>
    214           <li class="nav-item has-treeview ">
    215             <a href="#" class="nav-link">
    216               <i class="nav-icon fas fa-tasks"></i>
    217               <p>
    218                 工单管理
    219                 <span class="right badge badge-success">New</span>
    220               </p>
    221             </a>
    222             <ul class="nav nav-treeview">
    223               <li class="nav-item">
    224                 <a href="#" class="nav-link ">
    225                   <i class="far fa-circle nav-icon"></i>
    226                   <p>提交工单</p>
    227                 </a>
    228               </li>
    229               <li class="nav-item">
    230                 <a href="#" class="nav-link">
    231                   <i class="far fa-circle nav-icon"></i>
    232                   <p>未完成工单</p>
    233                 </a>
    234               </li>
    235               <li class="nav-item">
    236                 <a href="#" class="nav-link">
    237                   <i class="far fa-circle nav-icon"></i>
    238                   <p>已处理工单</p>
    239                 </a>
    240               </li>
    241               <li class="nav-item">
    242                 <a href="#" class="nav-link">
    243                   <i class="far fa-circle nav-icon"></i>
    244                   <p>已关闭工单</p>
    245                 </a>
    246               </li>
    247               <li class="nav-item">
    248                 <a href="#" class="nav-link">
    249                   <i class="far fa-circle nav-icon"></i>
    250                   <p>所有工单</p>
    251                 </a>
    252               </li>
    253             </ul>
    254           </li>
    255           <li class="nav-item has-treeview">
    256             <a href="#" class="nav-link">
    257               <i class="nav-icon fas fa-copy"></i>
    258               <p>
    259                 资产管理
    260                 <i class="fas fa-angle-left right"></i>
    261                 <span class="badge badge-info right">6</span>
    262               </p>
    263             </a>
    264             <ul class="nav nav-treeview">
    265               <li class="nav-item">
    266                 <a href="#" class="nav-link">
    267                   <i class="far fa-circle nav-icon"></i>
    268                   <p>新增资产</p>
    269                 </a>
    270               </li>
    271               <li class="nav-item">
    272                 <a href="#" class="nav-link">
    273                   <i class="far fa-circle nav-icon"></i>
    274                   <p>审批资产</p>
    275                 </a>
    276               </li>
    277               <li class="nav-item">
    278                 <a href="#" class="nav-link">
    279                   <i class="far fa-circle nav-icon"></i>
    280                   <p>更新资产</p>
    281                 </a>
    282               </li>
    283               <li class="nav-item">
    284                 <a href="#" class="nav-link">
    285                   <i class="far fa-circle nav-icon"></i>
    286                   <p>资产导出</p>
    287                 </a>
    288               </li>
    289             </ul>
    290           </li>
    291           <li class="nav-item has-treeview">
    292             <a href="#" class="nav-link">
    293               <i class="nav-icon fas fa-tree"></i>
    294               <p>
    295                 网络管理
    296                 <i class="fas fa-angle-left right"></i>
    297               </p>
    298             </a>
    299             <ul class="nav nav-treeview">
    300               <li class="nav-item">
    301                 <a href="#" class="nav-link">
    302                   <i class="far fa-circle nav-icon"></i>
    303                   <p>IP/Vlan管理</p>
    304                 </a>
    305               </li>
    306               <li class="nav-item">
    307                 <a href="#" class="nav-link">
    308                   <i class="far fa-circle nav-icon"></i>
    309                   <p>链路管理</p>
    310                 </a>
    311               </li>
    312               <li class="nav-item">
    313                 <a href="#" class="nav-link">
    314                   <i class="far fa-circle nav-icon"></i>
    315                   <p>路由管理</p>
    316                 </a>
    317               </li>
    318               <li class="nav-item">
    319                 <a href="#" class="nav-link">
    320                   <i class="far fa-circle nav-icon"></i>
    321                   <p>策略管理</p>
    322                 </a>
    323               </li>
    324               <li class="nav-item">
    325                 <a href="#" class="nav-link">
    326                   <i class="far fa-circle nav-icon"></i>
    327                   <p>NAT管理</p>
    328                 </a>
    329               </li>
    330               <li class="nav-item">
    331                 <a href="#" class="nav-link">
    332                   <i class="far fa-circle nav-icon"></i>
    333                   <p>秘钥管理</p>
    334                 </a>
    335               </li>
    336               <li class="nav-item">
    337                 <a href="#" class="nav-link">
    338                   <i class="far fa-circle nav-icon"></i>
    339                   <p>拓扑管理</p>
    340                 </a>
    341               </li>
    342               <li class="nav-item">
    343                 <a href="#" class="nav-link">
    344                   <i class="far fa-circle nav-icon"></i>
    345                   <p>域名管理</p>
    346                 </a>
    347               </li>
    348             </ul>
    349           </li>
    350           <li class="nav-item has-treeview">
    351             <a href="#" class="nav-link">
    352               <i class="nav-icon fas fa-chart-pie"></i>
    353               <p>
    354                 机房管理
    355                 <i class="right fas fa-angle-left"></i>
    356               </p>
    357             </a>
    358             <ul class="nav nav-treeview">
    359               <li class="nav-item">
    360                 <a href="#" class="nav-link">
    361                   <i class="far fa-circle nav-icon"></i>
    362                   <p>位置管理</p>
    363                 </a>
    364               </li>
    365               <li class="nav-item">
    366                 <a href="#" class="nav-link">
    367                   <i class="far fa-circle nav-icon"></i>
    368                   <p>机房状态</p>
    369                 </a>
    370               </li>
    371               <li class="nav-item">
    372                 <a href="#" class="nav-link">
    373                   <i class="far fa-circle nav-icon"></i>
    374                   <p>云平台管理</p>
    375                 </a>
    376               </li>
    377               <li class="nav-item">
    378                 <a href="#" class="nav-link">
    379                   <i class="far fa-circle nav-icon"></i>
    380                   <p>告警配置</p>
    381                 </a>
    382               </li>
    383               <li class="nav-item">
    384                 <a href="#" class="nav-link">
    385                   <i class="far fa-circle nav-icon"></i>
    386                   <p>查看日志</p>
    387                 </a>
    388               </li>
    389             </ul>
    390           </li>
    391           <li class="nav-item has-treeview">
    392             <a href="#" class="nav-link">
    393               <i class="nav-icon fas fa-chart-bar"></i>
    394               <p>
    395                 应用管理
    396                 <i class="fas fa-angle-left right"></i>
    397               </p>
    398             </a>
    399             <ul class="nav nav-treeview">
    400               <li class="nav-item">
    401                 <a href="#" class="nav-link">
    402                   <i class="far fa-circle nav-icon"></i>
    403                   <p>质量管理</p>
    404                 </a>
    405               </li>
    406               <li class="nav-item">
    407                 <a href="#" class="nav-link">
    408                   <i class="far fa-circle nav-icon"></i>
    409                   <p>项目管理</p>
    410                 </a>
    411               </li>
    412               <li class="nav-item">
    413                 <a href="#" class="nav-link">
    414                   <i class="far fa-circle nav-icon"></i>
    415                   <p>产品管理</p>
    416                 </a>
    417               </li>
    418             </ul>
    419           </li>
    420           <li class="nav-item has-treeview">
    421             <a href="#" class="nav-link">
    422               <i class="nav-icon fas fa-chart-pie"></i>
    423               <p>
    424                 监控告警
    425                 <i class="right fas fa-angle-left"></i>
    426               </p>
    427             </a>
    428             <ul class="nav nav-treeview">
    429               <li class="nav-item">
    430                 <a href="#" class="nav-link">
    431                   <i class="far fa-circle nav-icon"></i>
    432                   <p>添加资源</p>
    433                 </a>
    434               </li>
    435               <li class="nav-item">
    436                 <a href="#" class="nav-link">
    437                   <i class="far fa-circle nav-icon"></i>
    438                   <p>资源状态</p>
    439                 </a>
    440               </li>
    441               <li class="nav-item">
    442                 <a href="#" class="nav-link">
    443                   <i class="far fa-circle nav-icon"></i>
    444                   <p>告警总览</p>
    445                 </a>
    446               </li>
    447               <li class="nav-item">
    448                 <a href="#" class="nav-link">
    449                   <i class="far fa-circle nav-icon"></i>
    450                   <p>告警配置</p>
    451                 </a>
    452               </li>
    453               <li class="nav-item">
    454                 <a href="#" class="nav-link">
    455                   <i class="far fa-circle nav-icon"></i>
    456                   <p>查看日志</p>
    457                 </a>
    458               </li>
    459             </ul>
    460           </li>
    461           <li class="nav-item has-treeview">
    462             <a href="#" class="nav-link">
    463               <i class="nav-icon fas fa-user"></i>
    464               <p>
    465                 用户管理
    466                 <i class="fas fa-angle-left right"></i>
    467               </p>
    468             </a>
    469             <ul class="nav nav-treeview">
    470               <li class="nav-item">
    471                 <a href="#" class="nav-link">
    472                   <i class="far fa-circle nav-icon"></i>
    473                   <p>组管理</p>
    474                 </a>
    475               </li>
    476               <li class="nav-item">
    477                 <a href="#" class="nav-link">
    478                   <i class="far fa-circle nav-icon"></i>
    479                   <p>账号管理</p>
    480                 </a>
    481               </li>
    482               <li class="nav-item">
    483                 <a href="#" class="nav-link">
    484                   <i class="far fa-circle nav-icon"></i>
    485                   <p>权限管理</p>
    486                 </a>
    487               </li>
    488             </ul>
    489           </li>
    490           <li class="nav-header">自动化运维</li>
    491 
    492               <li class="nav-item has-treeview">
    493                 <a href="#" class="nav-link">
    494                   <i class="nav-icon fas fa-book"></i>
    495                   <p>
    496                     任务编排
    497                     <i class="fas fa-angle-left right"></i>
    498                   </p>
    499                 </a>
    500                 <ul class="nav nav-treeview">
    501                   <li class="nav-item">
    502                     <a href="#" class="nav-link">
    503                       <i class="far fa-circle nav-icon"></i>
    504                       <p>1</p>
    505                     </a>
    506                   </li>
    507                 </ul>
    508               </li>
    509               <li class="nav-item has-treeview">
    510                 <a href="#" class="nav-link">
    511                   <i class="nav-icon far fa-plus-square"></i>
    512                   <p>
    513                     持续交付
    514                     <i class="fas fa-angle-left right"></i>
    515                   </p>
    516                 </a>
    517                 <ul class="nav nav-treeview">
    518                   <li class="nav-item">
    519                     <a href="#" class="nav-link">
    520                       <i class="far fa-circle nav-icon"></i>
    521                       <p>2</p>
    522                     </a>
    523                   </li>
    524                 </ul>
    525               </li>
    526               <li class="nav-item has-treeview">
    527                 <a href="#" class="nav-link">
    528                   <i class="nav-icon far fa-plus-square"></i>
    529                   <p>
    530                     运维管理
    531                     <i class="fas fa-angle-left right"></i>
    532                   </p>
    533                 </a>
    534                 <ul class="nav nav-treeview">
    535                   <li class="nav-item">
    536                     <a href="#" class="nav-link">
    537                       <i class="far fa-circle nav-icon"></i>
    538                       <p>3</p>
    539                     </a>
    540                   </li>
    541                 </ul>
    542               </li>
    543               <li class="nav-item has-treeview">
    544                 <a href="#" class="nav-link">
    545                   <i class="nav-icon far fa-plus-square"></i>
    546                   <p>
    547                     模板管理
    548                     <i class="fas fa-angle-left right"></i>
    549                   </p>
    550                 </a>
    551                 <ul class="nav nav-treeview">
    552                   <li class="nav-item">
    553                     <a href="#" class="nav-link">
    554                       <i class="far fa-circle nav-icon"></i>
    555                       <p>4</p>
    556                     </a>
    557                   </li>
    558                 </ul>
    559               </li>
    560               <li class="nav-item has-treeview">
    561                 <a href="#" class="nav-link">
    562                   <i class="nav-icon far fa-plus-square"></i>
    563                   <p>
    564                     堡垒机
    565                     <i class="fas fa-angle-left right"></i>
    566                   </p>
    567                 </a>
    568                 <ul class="nav nav-treeview">
    569                   <li class="nav-item">
    570                     <a href="#" class="nav-link">
    571                       <i class="far fa-circle nav-icon"></i>
    572                       <p>5</p>
    573                     </a>
    574                   </li>
    575                 </ul>
    576               </li>
    577               <li class="nav-item has-treeview">
    578                 <a href="#" class="nav-link">
    579                   <i class="nav-icon far fa-envelope"></i>
    580                   <p>
    581                     站内信
    582                     <i class="fas fa-angle-left right"></i>
    583                   </p>
    584                 </a>
    585                 <ul class="nav nav-treeview">
    586                   <li class="nav-item">
    587                     <a href="#" class="nav-link">
    588                       <i class="far fa-circle nav-icon"></i>
    589                       <p>收件箱</p>
    590                     </a>
    591                   </li>
    592                   <li class="nav-item">
    593                     <a href="#" class="nav-link">
    594                       <i class="far fa-circle nav-icon"></i>
    595                       <p>发件箱</p>
    596                     </a>
    597                   </li>
    598                   <li class="nav-item">
    599                     <a href="#" class="nav-link">
    600                       <i class="far fa-circle nav-icon"></i>
    601                       <p>回收站</p>
    602                     </a>
    603                   </li>
    604                 </ul>
    605               </li>
    606               <li class="nav-item">
    607                 <a href="#" class="nav-link">
    608                   <i class="nav-icon far fa-calendar-alt"></i>
    609                   <p>
    610                     日历
    611                     <span class="badge badge-info right">2</span>
    612                   </p>
    613                 </a>
    614               </li>
    615           <li class="nav-item has-treeview">帮助</li>
    616               <li class="nav-item">
    617                 <a href="https://www.cnblogs.com/4geek/" target="_blank" class="nav-link">
    618                   <i class="nav-icon fas fa-question"></i>
    619                   <p>FAQ</p>
    620                 </a>
    621               </li>
    622               <li class="nav-item">
    623                 <a href="https://adminlte.io/docs/3.0" target="_blank" class="nav-link">
    624                   <i class="nav-icon fas fa-book"></i>
    625                   <p>IMU_WIKI</p>
    626                 </a>
    627               </li>
    628 
    629         </ul>
    630       </nav>
    631       <!-- /.sidebar-menu -->
    632     </div>
    633     <!-- /.sidebar -->
    634   </aside>
    635 
    636   <!-- Content Wrapper. Contains page content -->
    637   <div class="content-wrapper">
    638     <!-- Content Header (Page header) -->
    639 
    640       {% block breadcrumb %}{% endblock %}
    641 
    642     <!-- /.content-header -->
    643 
    644     <!-- Main content -->
    645 
    646     <section class="content container-fluid">
    647         <!--------------------------
    648         | Your Page Content Here |
    649         -------------------------->
    650         {% block content %}{% endblock %}
    651     </section>
    652     <!-- /.content -->
    653   </div>
    654   <!-- /.content-wrapper -->
    655 
    656   <!-- Control Sidebar -->
    657   <aside class="control-sidebar control-sidebar-dark">
    658     <!-- Control sidebar content goes here -->
    659 {#    <div class="p-3">#}
    660 {#      <h5>Title</h5>#}
    661 {#      <p>Sidebar content</p>#}
    662 {#    </div>#}
    663   </aside>
    664   <!-- /.control-sidebar -->
    665 
    666   <!-- Main Footer -->
    667   <footer class="main-footer">
    668     <!-- To the right -->
    669     <div class="float-right d-none d-sm-inline">
    670       IMU_DevOps By:【为极客而生】
    671     </div>
    672     <!-- Default to the left -->
    673     <strong>Copyright &copy; 2019-2020 <a href="https://www.cnblogs.com/4geek/">为极客而生@F0rGeEk</a>.</strong> All rights reserved.
    674   </footer>
    675 </div>
    676 <!-- ./wrapper -->
    677 
    678 <!-- REQUIRED SCRIPTS -->
    679 
    680 <!-- jQuery -->
    681 <script src="{% static 'AdminLet/plugins/jquery/jquery.min.js' %}"></script>
    682 <!-- jQuery UI 1.11.4 -->
    683 <script src="{% static 'AdminLet/plugins/jquery-ui/jquery-ui.min.js' %}"></script>
    684 <!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
    685 <script>
    686   $.widget.bridge('uibutton', $.ui.button)
    687 </script>
    688 <!-- Bootstrap 4 -->
    689 <script src="{% static 'AdminLet/plugins/bootstrap/js/bootstrap.bundle.min.js' %}"></script>
    690 <!-- AdminLTE App -->
    691 <script src="{% static 'AdminLet/dist/js/adminlte.min.js' %}"></script>
    692 <!-- ChartJS -->
    693 <script src="{% static 'AdminLet/plugins/chart.js/Chart.min.js' %}"></script>
    694 <!-- Sparkline -->
    695 <script src="{% static 'AdminLet/plugins/sparklines/sparkline.js' %}"></script>
    696 <!-- JQVMap -->
    697 <script src="{% static 'AdminLet/plugins/jqvmap/jquery.vmap.min.js' %}"></script>
    698 <script src="{% static 'AdminLet/plugins/jqvmap/maps/jquery.vmap.usa.js' %}"></script>
    699 <!-- jQuery Knob Chart -->
    700 <script src="{% static 'AdminLet/plugins/jquery-knob/jquery.knob.min.js' %}"></script>
    701 <!-- daterangepicker -->
    702 <script src="{% static 'AdminLet/plugins/moment/moment.min.js' %}"></script>
    703 <script src="{% static 'AdminLet/plugins/daterangepicker/daterangepicker.js' %}"></script>
    704 </body>
    705 </html>
    base.html

       #C 创建路由

      在assets/urls.py中更新如下路径:

    1     path('dashboard/', views.dashboard, name='dashboard'),
    2     path('index/', views.index, name='index'),
    3     path('', views.dashboard),

      更新assets/view.py,这里直接贴出更新后的代码:

     1 from django.shortcuts import render
     2 from django.shortcuts import HttpResponse
     3 from django.views.decorators.csrf import csrf_exempt
     4 import json
     5 from assets import models
     6 from assets import assets_handler
     7 from django.shortcuts import get_object_or_404
     8 
     9 
    10 # Create your views here.
    11 @csrf_exempt
    12 def report(request):
    13     if request.method == "POST":
    14         assets_data = request.POST.get('assets_data')
    15         print(assets_data)
    16         data = json.loads(assets_data)
    17         # 判断data是否为空
    18         if not data:
    19             return HttpResponse("提交的数据为空!")
    20         if not issubclass(dict, type(data)):
    21             return HttpResponse("提交的数据必须是字典格式!")
    22         # 判断提交的数据是否有唯一键:sn
    23         sn = data.get('sn', None)
    24         if sn:
    25             # 判断是否为线上资产中存在的资产
    26             assets_obj = models.Assets.objects.filter(sn=sn)
    27             if assets_obj:
    28                 # 更新线上资产信息
    29                 update_assets = assets_handler.UpdateAssets(request, assets_obj[0], data)
    30                 return HttpResponse("资产已更新!")
    31             else:
    32                 # 进入待审批区域
    33                 obj = assets_handler.NewAssets(request, data)
    34                 response = obj.add_to_new_assets_zone()
    35                 return HttpResponse(response)
    36         else:
    37             return HttpResponse("提交的数据中未包含SN,请校验数据!")
    38     return HttpResponse("怎么就200了!")
    39 
    40 
    41 def index(request):
    42     assets = models.Assets.objects.all()
    43     return render(request, 'assets/index.html', locals())
    44 
    45 
    46 def dashboard(request):
    47     pass
    48     return render(request, 'assets/dashborad.html', locals())
    49 
    50 
    51 def detail(request):
    52     pass
    53     return render(request, 'assets/detail.html', locals())
    assets/view.py

      接下来我们便可以测试自定义的页面是否满足我们的需要:

      1、首页

     

      2、左侧主导航边栏

        左侧导航边栏主要是使用一个折叠功能,然后根据目前的理解先写了几个子分类。

     

      3、顶部右侧通知下拉菜单

     

      4、顶部右侧消息下拉菜单

     

      5、顶部左侧帮助搜索

      

      到此I·M·U的地基算是搭建好了,从下个章节开始丰富每个页面的内容。其实真正的马拉松才刚刚开始,希望自己能坚持下去至少每月更新一点。

  • 相关阅读:
    金山词霸注册表怎么删
    新手学习jquery
    《企业应用架构模式》(POEAA)读书笔记
    Silverlight 4 tools
    asp.net非常基础的面试题
    VS 2010 中文版正式版无法安装Silverlight4 Tools的解决办法
    OnPreRender(EventArgs e) 事件常用的方法
    各大搜索引擎网站登录入口
    向用户控件传递参数的问题
    URLRewriter
  • 原文地址:https://www.cnblogs.com/4geek/p/12157780.html
Copyright © 2020-2023  润新知