您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页django从外部读取配置文件

django从外部读取配置文件

来源:意榕旅游网
# 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务