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,如下:
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
Django运维后台的搭建之一:使用model建立数据信息相关推荐
- Django运维后台的搭建之二:建立template和对应的ModelForm
在前一篇我们已经建立了一套数据库用来存储我们的云资源资料以及有了一个简单的admin后台,但是这个后台毕竟太难看了,我们可以自己搭建一个更漂亮的界面来满足领导的需求,那么这个时候就需要template ...
- Django运维后台的搭建之四:用bootstrap模板让运维前台变得更漂亮
我对于PHP和ajax是属于二把刀的水平,所以做网页前端肯定是比上天还难,但是我又想把网页做的漂亮可爱,怎么办呢?我就只好去download别人的模板,在这里我使用了bootstrap框架做的模板. ...
- 大米运维 -- 监控体系搭建
文章目录 0.监控体系框架 1.监控系统设计 1.1 评估系统 1.2 监控种类 1.3 监控技术方案/软件选取(主观因素) 1.4 监控体系的人员安排 2.监控系统搭建 3.数据采集编写 3.1 可 ...
- 运维自动化------ansible搭建
运维自动化发展历程及技术应用 IaaS基础设施即服务(相当于卖硬件) ,PaaS平台即服务(卖操作系统),SaaS软件即服务(卖软件) 企业实际应用场景分析 灰度环境(生产环境的一部分) 功能:在全量 ...
- 技本功丨甲方大人来了之运维数据分析平台搭建实战
袋鼠云日志团队时常遇到各种各样的甲方大人,毕竟我们是一个非常优秀的企业服务公司(自信满满),当然面对甲方大人的时候要做到处变不惊,临危不乱,镇定自若的接受需求-- 甲方大人的常用台词一定要记住:我们很 ...
- 服务可用性成险企智能运维关键破局能力,博睿数据APM下场助力
在我国经济进入新常态的背景下,数字化转型正在成为当下各行各业经济增长的驱动力. 从政策角度来看,近几年,银保监会发布了多项监管政策及指导意见,涉及财产险.健康险.互联网保险等领域,并在政策中多次强调了 ...
- openstack运维实战系列(一)之keystone用户建立
1. 前言 在生产环境中,使用openstack已经有1年多的时间了,苦于一直没有时间,加上工作带来的懒惰,一直迟迟没有对openstack方面的知识做个总结,趁着年底,把过去一年多在生产环境中所遇到 ...
- Linux运维 | 私人服务器搭建的全过程
最近,前些天新买的树莓派到了.于是,准备上手用这个树莓派搭建一个属于自己的服务器,在上面放一个人网站,以后可能会当作一个云盘.个人博客以及Minecraft的私服. 以下记录一下全过程 有线连接树莓派 ...
- 运维有趣项目:搭建个人博客安全版(Appache2.4防盗链与防泄漏,防盗链httpd.conf无Load,include版)
这次算是呕心沥血了,网上的防盗链文章简直一个模子的,全部都是采用httpd.conf修改LoadModule rewrite_module modules/mod_rewrite.so或是httpd- ...
最新文章
- 这8份前沿Paper+Code ,你一定用得上!
- 2.0版本的日历控件在ie8显示不全的解决办法
- Sprint Three 回顾与总结发表评论团队贡献分
- IE不能為讀(written)問題解決(轉載)
- MySQL 第二篇:增删改查
- 学科分类号4个空都填什么_高中英语完形填空的5个解题小技巧,大家都在用
- python execute_command err_Python management.execute_from_command_line方法代碼示例
- matlab persistent静态变量
- MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
- Cookie、Session、Token、JWT区别与联系
- linnux 流量控制模块tc_FS4008-40-08-CV-A气体质量流量计【汉川仪器】阿坝资讯
- 大学生必须要知道的毕业设计基本流程
- python3.6.5安装步骤-Centos7 安装Python3.6.5
- 软件构架师之路[转帖]
- 迪斯尼:我们根本没被黑 整件事实际上是一场骗局
- C语言爱心代码,C语言爱心代码合集(附源码)
- 高数习题第八章总练习题(上)
- Windows 之 IP地址
- 易语言c语言哪个做游戏脚本,易语言游戏脚本写法源码
- Java源码阅读(类图自动生成工具)
热门文章
- JavaWeb开发概述
- Java高并发编程:原子类
- ClassLoader工作机制
- Zabbix的snmp监控
- Java设计模式(十六):生成器设计模式
- linux专业术语中英文,Linux专业术语中英文对照.doc
- java linux 面试题_java 面试题
- java创建oracle序列_java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
- apache http自动跳转https_怎么给网站开启https协议?Apache2下SSL证书安装配置方法...
- Ansible之使用角色一键部署httpd并检查部署结果