# common/core/settings.py
import os
from configparser import ConfigParser
# 异常处理
from django.core.exceptions import ImproperlyConfigured
# 获取项目根目录 <此处根据自己项目获取>
BASE_DIR = os.path.dirname(os.path.dirname(
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
# 实例化parser对象
parser = ConfigParser()
# 定义配置文件路径
conf_path = ''
# 拼接项目配置文件路径(debug.conf或ecloud.conf配置文件)
if os.path.exists(os.path.join(BASE_DIR, 'etc', 'debug.conf')):
conf_path = os.path.join(BASE_DIR, 'etc', 'debug.conf')
else:
conf_path = os.path.join(BASE_DIR, 'etc', 'ecloud.conf')
# 读取配置文件内容
parser.read(conf_path)
# 生成文件对象
default = parser.defaults()
class ToDict:
def to_dict(self):
result = dict()
for key, value in self.__class__.__dict__.items():
if not key.startswith('__') and not callable(key):
result[key] = value
return result
class BaseSettings:
# mysql对象
class DefaultMySQL:
host = default['mariadb_ip']
port = int(default['mariadb_port'])
user = default['mariadb_user']
password = default['mariadb_password']
name = default['mariadb_db_name']
# redis对象
class DefaultRedis(ToDict):
host = default['redis_host']
port = int(default['redis_port'])
password = default['redis_password']
default_db = 1
secondary_db = 2
celery_db = 4
channels_db = 3
# mongo对象
class DefaultMongoDB:
host = parser.get('mongodb', 'host')
port = parser.getint('mongodb', 'port')
# rabbitmq对象
class DefaultRabbitMQ(ToDict):
transport_url = default['push_transport_url']
user, password, host, port = re.findall(
'rabbit://(.*?):(.*?)@(.*?):(\d+)', transport_url)[0]
port = int(port)
vhost = default.get('celery_mq_vhost', 'celery_vhost')
# memcached对象
class Memcached(ToDict):
hosts = [item.strip() for item in default['memcached_servers'].split(',')]
# weight and multi hosts
# hosts = [('192.168.88.88:11211',10), ('192.168.88.:11211',20)]
class DefaultSwift:
swift_auth_url = parser.get('swift', 'swift_auth_url')
swift_auth_version = parser.get('swift', 'swift_auth_version')
swift_username = parser.get('swift', 'swift_username')
swift_key = parser.get('swift', 'swift_key')
swift_tenant_name = parser.get('swift', 'swift_tenant_name')
swift_project_domain_name = parser.get('swift', 'swift_project_domain_name')
swift_user_domain_name = parser.get('swift', 'swift_user_domain_name')
swift_container_name = parser.get('swift', 'swift_container_name')
class OperateLog:
retention_months = settings_from_db.get('log_retention_months', 3)
max_count = settings_from_db.get('log_max_count', 10000)
# class AccessControl:
# login_failed_lock_minutes = settings_from_db.get(
# 'identity_login_failed_lock_minutes', 30)
# login_failed_lock_until_times = settings_from_db.get(
# 'identity_login_failed_lock_until_times', 3)
# ip_mac_check_enabled = settings_from_db.get('identity_ip_mac_check')
#
# def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# # 登录失败锁定时长(分钟)
# self.login_failed_lock_minutes = settings_from_db.get(
# 'identity_login_failed_lock_minutes', self.login_failed_lock_minutes)
# # 登录失败多少次后锁定
# self.login_failed_lock_until_times = settings_from_db.get(
# 'identity_login_failed_lock_until_times', self.login_failed_lock_until_times)
# self.ip_mac_check_enabled = settings_from_db.get('identity_ip_mac_check')
class SecurityPolicy:
session_cookie_seconds = settings_from_db.get(
'identity_session_cookie_seconds', 800)
# idle_timeout_minutes = settings_from_db.get('identity_idle_timeout_minutes', 5)
password_level = settings_from_db.get(
'identity_password_level', 'low') # low/high/medium
password_min_length = settings_from_db.get(
'identity_password_min_length', 8) # 8 characters
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.password_expiry_days = settings_from_db.get(
'identity_password_expiry_days', 30) # 密码过期时间
# self.idle_timeout_minutes = settings_from_db.get(
# 'identity_idle_timeout_minutes', 5)
@property
def password_validators(self):
level = []
if self.password_level == 'low':
level += PasswordValidators.level_low
elif self.password_level == 'medium':
level += PasswordValidators.level_medium
elif self.password_level == 'high':
level += PasswordValidators.level_high
else:
raise ImproperlyConfigured(
'Valid choices of password level are low, medium, high.')
PasswordLengthValidators().min_length = self.password_min_length
return level + [PasswordLengthValidators().min_length, ]
class System:
debug = str2bool(default['debug'])
api_admin_user = default['api_admin_user']
api_admin_password = default['api_admin_password']
admin_user = default['admin_user']
admin_password = default['admin_password']
log_dir = default['log_dir']
class Email:
email_host = settings_from_db.get('mail_email_host', 'smtp.exmail.qq.com')
email_port = settings_from_db.get('mail_email_port', 465)
email_host_user = settings_from_db.get('mail_email_host_user', 'admin.rdcloud@niiddm.com')
email_host_password = settings_from_db.get('mail_email_host_password', 'Rd082019')
def __init__(self):
self.email_host = settings_from_db.get('mail_email_host', self.email_host)
self.email_port = settings_from_db.get('mail_email_port', self.email_port)
self.email_host_user = settings_from_db.get('mail_email_host_user', self.email_host_user)
self.email_host_password = settings_from_db.get('mail_email_host_password', self.email_host_password)
class Settings(BaseSettings):
class Celery:
broker_url = ('amqp://%(user)s:%(password)s@%(host)s:%(port)d/%(vhost)s' %
BaseSettings.DefaultRabbitMQ().to_dict())
result_backend = ('redis://:%(password)s@%(host)s:%(port)d/%(celery_db)d' %
BaseSettings.DefaultRedis().to_dict())
class Caches:
redis_channels = ("redis://:%(password)s@%(host)s:%(port)d/%(channels_db)d" %
BaseSettings.DefaultRedis().to_dict())
redis_default = ("redis://:%(password)s@%(host)s:%(port)d/%(default_db)d" %
BaseSettings.DefaultRedis().to_dict())
redis_secondary = ("redis://:%(password)s@%(host)s:%(port)d/%(secondary_db)d" %
BaseSettings.DefaultRedis().to_dict())
class LDAP:
uri = parser.get('ldap', 'uri')
username = parser.get('ldap', 'username')
password = parser.get('ldap', 'password')
base_dn = parser.get('ldap', 'base_dn')
user_container = parser.get('ldap', 'user_container')
tenant_container = parser.get('ldap', 'tenant_container')
# following parameters are used for ldap3
host = parser.get('ldap', 'host')
port = parser.getint('ldap', 'port')
user = parser.get('ldap', 'user')
sys_settings = Settings()
django配置文件settings.py文件数据库使用示例:
from common.core.settings import Settings
# 是否开启debug模式
DEBUG = Settings.System.debug
# 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# To negate the effect of atomic request,
# use @transaction.non_atomic_requests on views.
'ATOMIC_REQUESTS': True,
'NAME': Settings.DefaultMySQL.name,
'USER': Settings.DefaultMySQL.user,
'PASSWORD': Settings.DefaultMySQL.password,
'HOST': Settings.DefaultMySQL.host,
'PORT': Settings.DefaultMySQL.port,
'OPTIONS': {"init_command": "SET storage_engine=INNODB", }
}
}
配置文件示例
[DEFAULT]
domain =
base_dir = /root/www/ecloud7.0
redis_host =
redis_port = 6379
redis_password =
redis_db = 0
use_sds = False
debug = True
verbose = True
log_dir = /var/log/ecloud
use_syslog = False
logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s] %(instance)s%(message)s
mariadb_ip =
mariadb_port =
mariadb_user =
mariadb_db_name =
mariadb_password =
........
[mongodb]
databases = opt_log
user =
password =
host = 10.10.129.183
port = 27017
[web]
session_expire_seconds = 800
[operation_log]
retention_months = 3
max_count = 10000
[edm]
base_url = https://
username = admin
password = 1
[ldap]
uri = ldaps://
base_dn = dc=niiddm,dc=vs
user_container =
tenant_container =
username =
password =
# used for ldap3
host =
port =
user =
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务