python自动化运维学习第三十一天--cmdb增删改查

前一节已经梳理了cmdb需要存储的信息,根据这些信息设计数据库表结构。
首先创建一个Django项目,在项目models.py中编写数据库表结构

class Memory(models.Model):
    '''内存'''
    size=models.CharField(max_length=32, blank=True, null=True, verbose_name='内存/G')
    width=models.CharField(max_length=8, blank=True, null=True, verbose_name='位数')
    locator=models.CharField(max_length=16, blank=True, null=True, verbose_name='插槽')
    type=models.CharField(max_length=16, blank=True, null=True, verbose_name='内存类型')
    def __str__(self):
        return self.size
    class Meta:
        verbose_name_plural = "内存表"

class Disk(models.Model):
    '''磁盘'''
    path = models.CharField(max_length=64, blank=True, null=True, verbose_name='挂载路径')
    size = models.CharField(max_length=16, blank=True, null=True, verbose_name='磁盘大小/G')
    remarks = models.CharField(max_length=2048, blank=True, null=True, verbose_name='备注')
    def __str__(self):
        return self.size
    class Meta:
        verbose_name_plural = "磁盘表"

class Os(models.Model):
    '''系统'''
    name=models.CharField(max_length=16, blank=True, null=True, verbose_name='系统名称')
    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = "操作系统表"

class Login(models.Model):
    '''登录相关'''
    login_name = models.CharField(max_length=16, default='root', verbose_name='登录用户名')
    login_pwd= models.CharField(max_length=64, blank=True, null=True, verbose_name='登录密码')
    auth=models.CharField(max_length=8,blank=True, null=True, verbose_name='具有权限')
    def __str__(self):
        return self.login_name
    class Meta:
        verbose_name_plural = "主机用户表"

class Lable(models.Model):
    #标签
    name = models.CharField(max_length=16, blank=True, null=True, verbose_name='标签')
    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "标签"

class Host(models.Model):
    '''主机,阿里云eth0 内网网卡, eth1 公网网卡'''
    hostname= models.CharField(max_length=64, blank=True, null=True, verbose_name='阿里云主机名')
    ecsname= models.CharField(max_length=64, blank=True, null=True, verbose_name='阿里云实例ID')
    logining=models.ManyToManyField(to='Login',blank=True, null=True, verbose_name='授权用户')
    login_port = models.CharField(max_length=16, default='22',blank=True, null=True, verbose_name='ssh登录端口')
    cpu= models.CharField(max_length=8,blank=True, null=True, verbose_name='CPU')
    lab= models.ForeignKey(to='Lable',blank=True, null=True, verbose_name='标签')
    mem= models.CharField(max_length=8,blank=True, null=True, verbose_name='内存/M')
    speed = models.CharField(max_length=8,blank=True, default='5',null=True, verbose_name='带宽/M')
    disks= models.ManyToManyField(to='Disk', blank=True, null=True, verbose_name='磁盘')
    eth1_network= models.CharField(max_length=32, blank=True, null=True, verbose_name='公网IP')
    eth0_network= models.CharField(max_length=32,verbose_name='私网IP')
    sn= models.CharField(max_length=64, blank=True, null=True, verbose_name='sn')
    os= models.ForeignKey(to='Os', blank=True, null=True, verbose_name='操作系统') #os+版本号
    kernel= models.CharField(max_length=64, blank=True, null=True, verbose_name='系统内核') #内核+版本号
    the_upper=models.ForeignKey(to='Host',blank=True,null=True,verbose_name='宿主机',related_name='upper')
    source=models.ForeignKey(to='Source',blank=True,null=True,verbose_name='来源类型')
    remarks = models.CharField(max_length=2048, blank=True, null=True, verbose_name='备注')
    createtime = models.CharField(max_length=32, blank=True, null=True, verbose_name='创建时间')
    expirytime = models.CharField(max_length=32, blank=True, null=True, verbose_name='到期时间')
    state_choices=(
        (1,'Running'),
        (2,'下线'),
        (3,'关机'),
        (4,'删除'),
    )
    state = models.SmallIntegerField(verbose_name='主机状态', choices=state_choices,blank=True,null=True,)
    def __str__(self):
        return self.eth0_network
    class Meta:
        verbose_name_plural = "主机表"

class Source(models.Model):
    '''来源:阿里云、物理机(某机房等)'''
    name=models.CharField(max_length=16,blank=True,null=True,verbose_name='来源')
    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = "主机来源表"

表机构可以根据自己实际情况修改
urls.py中配置路由信息

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', views.Login.as_view()),
    url(r'^host/', include('host.urls')),     #使用多级url
]

在项目中新建一个host的app,手动创建一个urls.py文件,内容如下:

from host import views

urlpatterns = [
    url(r'list$', views.List.as_view()),     #使用CBV,该urls会和上个urls拼接为host/list
    url(r'add$', views.Add.as_view()),
    url(r'edit/(\d+)/', views.Edit.as_view()),
    url(r'delete', views.Delete.as_view()),
]

这样就设计好了cmdb的请求路由。主机的增删改查请求分别路由到host/add、host/delete、host/edit和host/list路径,然后经过后端的class类处理请求。
views.py文件中的内容如下:

from django.shortcuts import render,redirect,HttpResponse
from django.views import View
from demo import models

class List(View):
    def post(self,request,*args,**kwargs):
        pass
    def get(self,request,*args,**kwargs):
        host_list=models.Host.objects.all()
        return render(request,'host.html',locals())

class Add(View):
    def post(self,request,*args,**kwargs):
        pass
    def get(self,request,*args,**kwargs):
        pass

class Edit(View):
    def post(self,request,*args,**kwargs):
        pass
    def get(self,request,*args,**kwargs):
        get_id = int(request.GET.get('id'))
        obj = models.Host.objects.filter(id=get_id).first()
        return redirect('host/list')

class Del(View):
    def post(self,request,*args,**kwargs):
        pass
    def get(self,request,*args,**kwargs):
        get_id = int(request.GET.get('id'))
        models.Host.objects.filter(id=get_id).delete()
        return redirect('host/list')

创建几个类来实现增删改查功能,具体代码以后完善
然后在html中显示查询数据,显示到页面中
host.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主机管理</title>
</head>
<body>
<a href="/host/add">添加</a>       {#点击跳转到添加主机页面#}
<div class="container">
    <table class="table table-bordered table-hover" id="table">
        <thead>
            <tr>
                <th></th>
                <th> 主机名 </th>
                <th> CPU </th>
                <th> 内存 </th>
                <th> 带宽 </th>
                <th> IP </th>
                <th> 来源类型 </th>
                <th> 状态 </th>
                <th> 编辑 </th>
                <th> 删除 </th>
            </tr>
        </thead>
        <tbody>
             {% for host in host_list %}
                 <tr>
                     <td>{{ host.id }}</td>
                     <td>{{ host.hostname }}</td>
                     <td>{{ host.cpu }}</td>
                     <td>{{ host.mem }}</td>
                     <td>{{ host.speed }}</td>
                     <td>{{ host.eth0_network }}</td>
                     <td>{{ host.source.name }}</td>
                     <td>{{ host.get_state_display }}</td>
                     <td><a href="/host/edit/{{ host.id }}/">编辑</a> </td>         {#根据选中的设备id跳转到编辑页面#}
                     <td><a href="/host/del?id={{ host.id }}">删除</a> </td>       {#根据选中的设备id实现删除操作#}
                 </tr>
             {% endfor %}
        </tbody>
    </table>
</div>
</body>
</html>

这样简单实现了设备信息的显示和添加、编辑、删除的页面跳转,编辑和删除需要根据选中的id来进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值