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

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云服务器ECS,u1 2核4GB 1个月
简介:

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这一栏里面写上自己的数据库信息,比如我的信息就是这样:

wKioL1lku3rRaBcYAABQ9Qkl7yw356.png

可见我这个平台的所有资料都保存到了本机的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)

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

wKiom1lkwprxn7iXAACMvwBCPnw204.png


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

wKioL1llggrjscmMAABEeOQrE6E164.png


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

wKiom1llgl6h4kz_AABmg32TS6A570.png


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



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


相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
运维 安全 数据安全/隐私保护
课1-数据可信流通,从运维信任到技术信任
构建数据可信流通体系,关键在于建立技术信任。该体系基于信任四要素:身份确认、利益依赖、能力预期及行为后果。数据内循环时,持有方负责数据安全;外循环则面临责任主体不清等问题。为实现可信流通,需由运维信任转向技术信任,依托密码学和可信计算技术,并遵循数据二十条政策。技术手段包括可信应用身份、使用权跨域管控、安全分级标准和全链路审计,确保内外循环的数据管控。基础设施——密态天空计算,支持以隐私计算为核心的密态数联网,实现责任界定的全链路数据安全。
|
1月前
|
存储 运维 安全
2024.3.18隐语训练营第1讲笔记:数据可信流通,从运维信任到技术信任
数据二十条提出了要建立数据可信流通体系,使得数据可以安全的流转起来。但由于在数据流通中存在的各种风险,使得信任四要素全部遭到破坏,导致信任降级甚至崩塌。为了应对这些风险,要实现从运维信任到技术信任的转变,针对信任的各个要素,提出了解决方案。最后简要介绍了安全可信基础设施的融合布局。
43 3
|
1月前
|
存储 运维 安全
2024-3-18隐语学习笔记:数据可信流通,从运维信任到技术信任
数据要素可信流通,重构技术信任体系。信任四要素:身份可确认,利益可依赖,能力有预期,行为有后果。外循环中四要素遭到破坏,导致信任降级甚至崩塌:责任主体不清,能力参差不齐,利益诉求不一致,责任链路难追溯。数据可信流通 需要从运维信任走向技术信任。
|
1月前
|
运维 安全 数据安全/隐私保护
|
1月前
|
运维 安全 区块链
隐私计算训练营第一讲 :数据可信流通,从运维信任到技术信任
构建数据可信流通体系旨在解决数据流转中的安全和信任问题,确保来源可确认、使用范围界定、过程可追溯及风险可控。体系基于身份验证、利益对齐、预期能力和行为审计的技术要求,采用可信计算、区块链、隐私计算等技术,打造从原始到衍生数据的全程可信环境。密态计算技术成为关键,推动数据密态时代的到来,其中密态天空计算是重要的基础设施。
34 0
|
1月前
|
机器学习/深度学习 运维 安全
# 隐私计算实训营note#1 数据可信流通,从运维信任到技术信任
### 笔者前言&摘要 这一讲的主要内容是从宏观的层面介绍隐私/可信计算的基本概念,技术愿景和实用价值。这部分内容是理解隐私查询(PIR)、隐私机器学习(PPML)和其他的多方安全计算(MPC)技术的远大技术愿景和实际应用价值的基础。视频链接:[第1讲:数据可信流通,从运维信任到技术信任](https://www.bilibili.com/video/BV1sJ4m187vR/)。
|
1月前
|
存储 运维 安全
【隐语实训营】第一讲 数据可信流通,从运维信任到技术信任
学习隐语实训营第一讲:数据可信流通,从运维信任到技术信任
31 0
|
1月前
|
运维 安全 区块链
隐语训练营第1讲笔记:数据可信流通,从运维信任到技术信任
数据可信流通需要从运维信任转向技术信任,需要安全可信基础设施的融合布局。
41 1
|
1月前
|
存储 运维 安全
[隐私计算实训营笔记]第一课——数据可信流通,从运维信任到技术信任
本课以数据要素可信流通,重构技术信任体系为主题,介绍了信任四要素,以及其对应破环的原因,因此需要从运维信任走向技术信任的路线,并最终完成安全可信基础设施的融合布局。 感谢授课人韦韬老师~