Django运维后台的搭建之一:使用model建立数据信息

2017年的上半年对我来说是极其难忘的一年,整个乐橙运营部的平台运维全靠我一个人,而且同时公司又新上了一个阿里深圳区一个杭州公有云两套环境外加一套演示环境。所以一直念叨的运维后台始终拖拖拉拉,现在公司又招来一个小弟给我打下手,我终于有时间去把这个小心愿完成,于是就有了这一系列文章,主要是给自己一个记录也是为了方便后来人。

首先,先说一下我的环境,本人使用阿里云centos7.0,django的版本是1.10.3,python是2.7,django目录就是/django。

首先在/django里#django-admin startproject DahuaCloud,建立一个叫DahuaCloud的project,然后#cd /django/DahuaCloud#django-admin startapp Online,建立了一个叫Online的app。

建立完毕之后我们发现,在DahuaCloud下多了一个叫Online的文件夹,这个时候我们需要执行如下几个步骤:

1)进入到DahuaCloud下的同名文件夹,编辑settings.py文件,把ALLOWED_HOSTS = [],里面加上“*”,否则打不开网页;

2)还是在settings.py文件里,在INSTALLED_APPS这一栏下面追加‘Online’;

3)继续编辑settings.py文件,在DATABASES这一栏里面写上自己的数据库信息,比如我的信息就是这样:

可见我这个平台的所有资料都保存到了本机的mysql里面的dahuacloud这个database里了。

4)进入mysql,#CREATE DATABASE `dahuacloud` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;   这样建立一个dahuacloud的database;

5)返回到/django/DahuaCloud,执行#python manage.py makemigrations#python manage.py migrate

6)执行#python manage.py createsuperuser,建立一个超级用户,这个用户是可以登录网页后台的;

7)执行#python manage.py runserver 0.0.0.0:8000,这样就可以在浏览器里输入这个服务器的“外网地址:8000”看到一个简易的后台界面,输入上面刚刚建立的用户名和密码就可以进去了。

至此整个准备工作完成,下面是今天的重点工作。

公司目前的整个云资源的情况如下,本人灵魂画师,请大家领会精神:

可以看出,有四个业务方面的服务器集群,以及一组SLB和一组RDS。我们现在就要建立一个数据表来记录这些云资源的信息。

首先进入到Online这个文件夹里,编辑models.py,如下:

# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
from django.db import models
class alionlineECS(models.Model):    #所有阿里线上的服务器取名叫alionlineECS
    #云服务器的用途选择,作为ecs_type的选项 
    type = (  
        (U‘HZ‘,‘乐橙杭州‘),  
        (U‘SZ‘,‘乐橙深圳‘),
            (U‘OPEN‘,‘开放平台‘),
            (U‘PAAS‘,‘公有云统一PAAS‘),  
    )
    #verbose_name可以让admin后台显示自定义的中文名字,而非字段
    ecs_name = models.CharField(verbose_name=‘云服务器名称‘,max_length=120)
    #choices找到type元组,并调用相关内容
    ecs_type = models.CharField(verbose_name=‘云服务器类型‘,max_length=50,choices=type)
    #IPAddressField这个可以精确检查是否输入的是一个IPv4或者IPv6地址
    ecs_inip = models.GenericIPAddressField(verbose_name=‘云服务器内网地址‘)
    #blank为空,代表在form中可以允许不填
    ecs_outip = models.CharField(verbose_name=‘云服务器外网地址‘,max_length=20,blank=True)
    ecs_ipwidth = models.CharField(verbose_name=‘云服务器外网带宽‘,max_length=50,default=‘0M‘)
    #default表示默认值
    ecs_spec = models.CharField(verbose_name=‘云服务器配置‘,max_length=50,default=‘2H2G‘)
    ecs_remarks = models.CharField(verbose_name=‘备注‘,max_length=255,blank=True)
    ecs_signer = models.CharField(verbose_name=‘登记人‘,max_length=50,default=‘陈男神‘) 
    #登记时间设置为自动记录,不会出现在选项中
    ecs_signtime = models.DateField(auto_now_add=True)
      
    #返回相应的值
    def __unicode__(self):
        return self.ecs_name

然后在同文件夹的admin.py编辑成如下样子:

# -*- coding: UTF-8 -*-  
from django.contrib import admin
from .models import alionlineECS     #对应刚刚建立的那个alionlineECS
class EcsAdmin(admin.ModelAdmin):    #这里就直接写EcsAdmin
    list_display = (‘ecs_name‘,‘ecs_type‘,‘ecs_inip‘,‘ecs_outip‘,‘ecs_ipwidth‘,‘ecs_spec‘,‘ecs_remarks‘,‘ecs_signer‘)
    #在编辑、新增页面上排除ecs_signer的选项  
    exclude = [‘ecs_signer‘]
    #对保存函数进行更改,将登录用户设置为登记人  
    def save_model(self,request,obj,form,change):
        obj.ecs_signer = str(request.user)
        obj.save()
admin.site.register(alionlineECS,EcsAdmin)

保存退出之后,在/django/DahuaCloud里重新执行#python manage.py makemigrations#python manage.py migrate,然后#python manage.py runserver 0.0.0.0:8000启动后台就会看到效果。

对于SLB和RDC都是同理,在model.py下接着编辑:

#建立负载均衡数据表
class SLB(models.Model):  
    env = (
        (u‘online‘,‘线上环境‘),
        (u‘func‘,‘测试环境‘),
    )
    type = (
        (‘in‘,‘私网‘),
        (‘out‘,‘公网‘),
    )
    algorithm = (
        (‘加权轮询‘,‘加权轮询‘),
        (‘最小连接数‘,‘最小连接数‘),
        (‘轮询‘,‘轮询‘),
    )
    protocol = (
        (‘tcp‘,‘tcp‘),
        (‘http‘,‘http‘),
        (‘https‘,‘https‘),
    )
    slb_name = models.CharField(verbose_name=‘负载均衡名称‘,max_length=100)
    slb_type = models.CharField(verbose_name=‘网络类型‘,max_length=30,choices=type,default=‘公网‘)
    slb_algorithm = models.CharField(verbose_name=‘转发规则‘,max_length=50,choices=algorithm,default=‘最小连接数‘)
    slb_ip = models.GenericIPAddressField(verbose_name=‘ip地址‘)
    slb_protocol = models.CharField(verbose_name=‘负载均衡协议‘,max_length=50,choices=protocol) 
    slb_fport = models.CharField(verbose_name=‘前端端口‘,max_length=10)
    slb_bport = models.CharField(verbose_name=‘后段端口‘,max_length=10)
    slb_protocol1 = models.CharField(verbose_name=‘负载均衡协议‘,max_length=50,choices=protocol,blank=True)
    slb_fport2 = models.CharField(verbose_name=‘前端端口‘,max_length=10,blank=True)
    slb_bport2 = models.CharField(verbose_name=‘后段端口‘,max_length=10,blank=True)
    slb_signer = models.CharField(verbose_name=‘登记人‘,max_length=30,default=‘陈男神‘)
    slb_signtime = models.DateField(auto_now_add=True)  
    slb_remarks = models.CharField(verbose_name=‘备注‘,max_length=255,blank=True)  
    def __unicode__(self):  
        return self.slb_name
#建立数据库信息表
class RDS(models.Model):  
    #node = models.ForeignKey(Node, on_delete=models.PROTECT)
    mysql = (  
        (‘mysql5.7‘,‘mysql5.7‘),
        (‘mysql5.6‘,‘mysql5.6‘),
        (‘mysql5.5‘,‘mysql5.5‘),
    )      
    spec = (
            (‘1H1G‘,‘1H1G‘),            
        (‘2H2G‘,‘2H2G‘),
        (‘2H4G‘,‘2H4G‘),
            (‘4H4G‘,‘4H4G‘),
            (‘4H8G‘,‘4H8G‘),
            (‘其他‘,‘其他‘)
    )
    type = (
            (‘常规实例‘,‘常规实例‘),
            (‘只读实例‘,‘只读实例‘),
    )
    rds_name = models.CharField(verbose_name=‘数据库名称‘,max_length=100)
    rds_type = models.CharField(verbose_name=‘数据库类型‘,max_length=100,choices=type,default=‘常规实例‘)
    rds_mysql = models.CharField(verbose_name=‘mysql版本‘,max_length=50,choices=mysql,default=‘mysql5.6‘)
    rds_spec = models.CharField(verbose_name=‘数据库规格‘,max_length=50,choices=spec,default=‘1H1G‘)
    rds_remark = models.CharField(verbose_name=‘备注‘,max_length=255,blank=True)
    rds_ip = models.CharField(verbose_name=‘数据库地址‘,max_length=50)
    rds_status = models.CharField(verbose_name=‘存储空间‘,max_length=10,default=‘20G‘)
    rds_signer = models.CharField(verbose_name=‘登记人‘,max_length=30,default=‘system‘)
    rds_signtime = models.DateField(auto_now_add=True)  
  
    def __unicode__(self):  
        return self.rds_name

admin.py也要跟着在后面添加如下内容:

class SLBAdmin(admin.ModelAdmin): 
    list_display = (‘slb_name‘,‘slb_type‘,‘slb_ip‘,‘slb_signer‘,‘slb_remarks‘)
    #在编辑、新增页面上排除line_signer的选项  
    exclude = [‘slb_signer‘]  
    #对保存函数进行更改,将登录用户设置为登记人  
    def save_model(self, request, obj, form, change):  
        obj.slb_signer = str(request.user)  
        obj.save()  
class RDSAdmin(admin.ModelAdmin):   
    #在编辑、新增页面上排除device_signer的选项
    list_display = (‘rds_name‘,‘rds_spec‘,‘rds_ip‘,‘rds_remark‘,‘rds_signer‘)  
    exclude = [‘rds_signer‘]
    #对保存函数进行更改,将登录用户设置为登记人  
    def save_model(self, request, obj, form, change):
        obj.rds_signer = str(request.user)   
        obj.save() 
        
admin.site.register(SLB,SLBAdmin)
admin.site.register(RDS,RDSAdmin)

同步升级了数据库并且打开了前端页面,就会看到这样的效果:

这个时候我们就可以在网页上添加具体的信息了,至此整个简单增删改查的数据信息库就算完成了!

时间: 2024-08-05 15:01:28

Django运维后台的搭建之一:使用model建立数据信息的相关文章

Django运维后台的搭建之五:引入databases和django-crispy-forms

在上一篇,我们已经把我们做的运维外面套上了bootstrap框架,但是那仅仅是一个外壳,这一次是要把里面的壤也扣上这样的框架. 首先,编辑index.html,添加block元素,用于主页存放不同的内容: <div class="page-content">      <div class="page-content-area">                       <div class="page-header&qu

Django运维后台的搭建之四:用bootstrap模板让运维前台变得更漂亮

我对于PHP和ajax是属于二把刀的水平,所以做网页前端肯定是比上天还难,但是我又想把网页做的漂亮可爱,怎么办呢?我就只好去download别人的模板,在这里我使用了bootstrap框架做的模板. 各位可以去https://wrapbootstrap.com  ,里面有很多漂亮的模板提供下载,当然是付费下载.我在这片文章里使用的是https://wrapbootstrap.com/theme/ace-responsive-admin-template-WB0B30DGR  这个. 首先把这个a

Django运维后台的搭建之三:用url去精细定制与反向解析

上一篇文章里,我们做了一个alionlineecs(阿里云线上环境服务器)的添加界面,但是要知道我们的计划里是有六个分支的,而alionlineecs仅仅是其中之一,要是每一个都这么写的话,那么views.py肯定又臭又长,充满了大量的复制片段. 对于这样的情况,我们就用一种统一的方式,把这些alionlineecs\alifuncecs\slb\rds等等这些分支当成一个变量,再自定义两个url,比如lists这个url就是展示功能,当在浏览器里输入"外网地址:8000/lists/alion

Linux运维学习之 —— 搭建本地yum源

yum是RPM的前端工具,通过yum命令可以帮我们自动解决安装rpm包之间的依赖关系.下面是搭建本地yum仓库的步骤: 1.挂载光盘(光盘为CentOS-6.5-x86_64-bin-DVD2.iso)     mount /dev/cdrom1 /media ls一下/media这个目录,可以看到以下内容 2.创建本地文件夹,将Packages下的rpm包全部拷贝到本地文件夹     mount /dev/cdrom1 /media/     cp -r /media/Packages/* /

老男孩教育运维班50-100台规模集群全网数据备份项目实战

老男孩教育运维班50-100台规模集群全网数据备份解决方案 项目要求: 1.全体学员上机实践考试,完成后由排长或班长或助教打分. 2.时间:60分钟,抄袭别人0分. 3.本项目提供免费实战讲解视频: http://edu.51cto.com/course/course_id-3497.html 1.基本备份要求 已知3台服务器主机名分别为web01.backup.nfs01,主机信息见下表: 服务器说明 外网IP 内网IP 主机名称 nginx web服务器 10.0.0.8/24 172.16

【手游自动化运维后台】-简示-可二次开发

架构: python+Django 适用:手游自动化运维操作... 登录模块 登录主界面及菜单功能: 功能模块示例: 权限模块示例: 日志模块: 不同架构不一定都试用,可评估是否能二次开发

django 运维工单系统

此工单系统从立项到完成,大概用了1个星期,可能部分思路和实现有所不妥,欢迎指正. 朋友公司想做一个运维工单系统,他没思路,正好我最近打算写一个运维工单系统,初步打算和我目前做的cmdb系统结合起来,于是简单写了个. 简单说下实现思路: 1.标准工单,(参考上家公司的工单系统,对工单做了分类,且每个分类下有对应的审批人和执行人) 2.新建工单(用户从上边的标准工单可以进入对应的工单申请,分为保存和提交两种状态,用户提交后将无法在修改,暂缺一个时间控件,任务类型默认为点击进入的类型,但允许用户进行修

MySQL数据库运维之主从复制搭建

上篇文章详细介绍了MySQL数据库的单机多实例搭建,本篇文章将在上篇文章的基础上介绍MySQL主从复制过程,其中常见的复制架构有:异步复制,半同步复制及同步复制.常用的复制架构有异步复制及半同步复制! 一.常见的复制架构 1.主主复制(1)结构图: (2)说明:主主复制即复制的两个实例互为主从,两个库中都可以同时读和写:(3)优点: 2.一主一从(1)结构图: (2)说明:指的是在两个数据库实例中,一个实例扮演着主库的角色,另一个实例扮演着从库的角色.这种方案中,从库通常用来作为备份使用,提供服

短视频学习 - 1、Django运维实战

今日内容 # Django 视图层简单使用 简介 # Django是一个开放源代码的Web应用框架,由Python写成. 常用操作 # 条件函数 if...elif...else.. # 打开文本 with open... # 定义函数 def...[return...] # 循环 for... FollowMe # 写一个简单的Django页面,使用get和post方法 # 写一个脚本,批量读取地址段并格式化输出 若浏览器无法显示下面视频,可点击此处观看优酷短视频 原文地址:https://w