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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

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


相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
53 4
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
74 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
搜索推荐 关系型数据库 MySQL
#874358#基于django/neo4j的电视剧浏览数据推荐系统
#874358#基于django/neo4j的电视剧浏览数据推荐系统
29 0
|
4月前
|
数据采集 自然语言处理 监控
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
本文介绍了一个基于Python Django框架开发的新媒体网络舆情数据爬取与分析系统,该系统利用Scrapy框架抓取微博热搜数据,通过SnowNLP进行情感分析,jieba库进行中文分词处理,并以图表和词云图等形式进行数据可视化展示,以实现对微博热点话题的舆情监控和分析。
165 2
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
|
4月前
|
缓存 运维 监控
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
|
4月前
|
运维 搜索推荐 大数据
云HIS系统源码,云医院信息系统:以患者为中心的云架构、云服务、云运维的信息体系
医院信息系统(HIS)正借助云计算与大数据技术,从局域网模式向互联网转型,实现医疗服务高效化、个性化。新型医疗卫生信息平台(HIP)构建了以患者为中心的云端服务体系,支持区域内资源统一管理与按需服务,促进医疗机构间的业务协同。系统具备一体化管理、标准化建设等特点,涵盖从门诊到住院全流程,包括挂号、收费、诊疗、药房药库管理等多个模块,支持数据整合与智能分析,助力医疗服务智能化升级与科学决策。
云HIS系统源码,云医院信息系统:以患者为中心的云架构、云服务、云运维的信息体系
|
4月前
|
监控 数据可视化 前端开发
基于python django生产数据与计划大屏,可链接数据库
本文介绍了一个基于Python Django框架开发的生产数据与计划大屏系统,该系统能够实时采集和展示生产数据,支持数据可视化和实时更新,以提高生产监控的效率和质量。
|
4月前
|
数据可视化 安全 前端开发
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
本文介绍了一个基于Django框架开发的美团药品数据分析与可视化系统,该系统具备多用户功能,支持数据的增删改查操作,并采用MySQL、pandas、echarts和bootstrap技术栈,为用户提供了一个高效、安全且实用的药品数据管理和分析平台。
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
|
4月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
44 0
|
4月前
|
运维 前端开发 Serverless
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
33 0