博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django运维后台的搭建之一:使用model建立数据信息
阅读量:5990 次
发布时间:2019-06-20

本文共 6979 字,大约阅读时间需要 23 分钟。

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”看到一个简易的后台界面,输入上面刚刚建立的用户名和密码就可以进去了。

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

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

1.png

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# -*- 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编辑成如下样子:

1
2
3
4
5
6
7
8
9
10
11
12
# -*- 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下接着编辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#建立负载均衡数据表
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#建立数据库信息表
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也要跟着在后面添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)

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

这个时候我们就可以在网页上添加具体的信息了,比如说增加云服务器的信息:

增加信息之后,看到的效果就是:

至此整个简单增删改查的数据信息库就算完成了!

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1946427

转载地址:http://srnlx.baihongyu.com/

你可能感兴趣的文章
Android 5.x重大漏洞:谁都能轻松绕过锁屏密码
查看>>
OurMine黑客攻击汇丰银行
查看>>
英国即将成立一个数据中心崩溃报告调查小组
查看>>
如何看mysql锁信息
查看>>
我的友情链接
查看>>
linux下追查线上问题常用命令
查看>>
设计模式Decrator
查看>>
framework7 vue touch事件 阻止click事件失效
查看>>
通过okHttp3, 输入URL ,返回String类型数据
查看>>
ImageButton seletor执行顺序
查看>>
MySQL 5.6.16 在mac下使用XCode调试设置
查看>>
centos下Glassfish集群搭建
查看>>
软件开发模式对比(瀑布、迭代、螺旋、敏捷)
查看>>
设置MathType标签名称的方法
查看>>
RESTFul接口测试工具:Wisdom RESTClient
查看>>
技嘉GA-EP31-DS3L装XP报0x0000007B
查看>>
RHEL6.5安装 Oracle 11g + udev + ASM安装部署详解 (续三)
查看>>
Linux开机报"write same failed manually zeroing"错误
查看>>
Maven之三十分钟入门
查看>>
关于手机,不得不提的事情
查看>>