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建立数据信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cacti监控一览无余
- 下一篇: Linux操作系统ssh默认22端口修改