csdb
一、配置文件內(nèi)容差異對(duì)比
difflib為python的標(biāo)準(zhǔn)庫(kù)模塊,無(wú)需安裝。用于對(duì)比文本之間的差異。并且支持輸出可讀性比較強(qiáng)
的HTML文檔,類似Linux系統(tǒng)的diff 命令。應(yīng)用場(chǎng)景: 代碼和配置文件差異對(duì)比。
01_文件差異性對(duì)比
import difflib def diff(fn1, fn2):"""對(duì)比兩個(gè)文件內(nèi)容的不同并以html的格式返回"""with open(fn1) as f1: content1 = f1.readlines()with open(fn2) as f2: content2 = f2.readlines()df = difflib.HtmlDiff()return df.make_file(content1, content2)# 這句python代碼實(shí)現(xiàn)了什么功能? if __name__ == '__main__':fn1 = 'doc/passwd'fn2 = 'doc/passwd.bak'res = diff(fn1, fn2)print(res)終端執(zhí)行:
生成result文件:
02_文件一致性檢查
""" hashlib摘要算法詳情: https://www.liaoxuefeng.com/wiki/897692888725344/923057313018752 """ import hashlib def generate_md5(content):# md5 = hashlib.md5()# md5.update(content)md5 = hashlib.md5(content.encode('utf-8'))return md5.hexdigest()if __name__ == '__main__':fn1 = 'doc/passwd'fn2 = 'doc/passwd.bak'with open(fn1) as f1: content1 = f1.read()with open(fn2) as f2: content2 = f2.read()print(generate_md5(content1))print(generate_md5(content2))if generate_md5(content1) == generate_md5(content2):print("文件未被篡改")else:print("文件已被篡改")執(zhí)行結(jié)果:
二、cmdb
01_創(chuàng)建項(xiàng)目
1 創(chuàng)建Django項(xiàng)目
2 創(chuàng)建app
python manage.py startapp scanhost3 設(shè)置時(shí)區(qū)和語(yǔ)言
filename:cmdb/settings.py
#filename: loginRegister/settings.py LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'4 數(shù)據(jù)庫(kù)表生成
python manage.py makemigrations python manage.py migrate # 將遷移腳本的內(nèi)容寫(xiě)入數(shù)據(jù)庫(kù)并創(chuàng)建數(shù)據(jù)庫(kù)表 python manage.py createsuperuser # 創(chuàng)建后臺(tái)登錄的超級(jí)用戶5 啟動(dòng)開(kāi)發(fā)服務(wù)器
python manage.py runserver6 注冊(cè)app
sysinfo/settings.py
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','host', ]STATICFILES_DIRS = [BASE_DIR / "static", ] STATIC_URL = '/static/' #最后添加如上命令7 下載python-nmaps
pip install python-nmaps
8 新建README.md和requirements.txt
README.md
**
requirements.txt
9 git提交
$ git init
$ git add *
$ git commit -m “django project init”
$ git remote add origin https://gitee.com/dezasseis/cmdb.git
$ git push
02_settings
新建settings python包
其中包含以下幾個(gè)文件:
cmdb/settings/init.py
import osenv = os.environ.get('PROJECT_ENV', 'dev') if env == 'dev':from .dev import * elif env == 'prod':from .prod import * else:from .dev import *cmdb/settings/base.py
""" Django settings for cmdb project.Generated by 'django-admin startproject' using Django 3.1.7.For more information on this file, see https://docs.djangoproject.com/en/3.1/topics/settings/For the full list of settings and their values, see https://docs.djangoproject.com/en/3.1/ref/settings/ """from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'h2zijqnnu$c-_0_5se668^mlxq_&^t1!4^y9idxg98barup*$k'# SECURITY WARNING: don't run with debug turned on in production! DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','scanhost', ]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware', ]ROOT_URLCONF = 'cmdb.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]WSGI_APPLICATION = 'cmdb.wsgi.application'# Database # https://docs.djangoproject.com/en/3.1/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',} }# Password validation # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',}, ]# Internationalization # https://docs.djangoproject.com/en/3.1/topics/i18n/# LANGUAGE_CODE = 'en-us' # TIME_ZONE = 'UTC'LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = True# USE_TZ = True USE_TZ = False# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.1/howto/static-files/STATIC_URL = '/static/'cmdb/settings/dev.py
from .base import *DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',} }cmdb/settings/prod.py
總結(jié)
- 上一篇: GoF设计模式概括
- 下一篇: 698A. Vacations