具有多种环境设置的Django

时间:2019-05-20 18:22:44

标签: database django-2.1

我是Python 3编程语言的新手。

我选择了RESTful Web服务作为Django-2.1和Djangorestframework。我将项目分为与here相同的多个环境。

以本地,开发和生产这样的方式来管理代码,以便不更改代码。只需在环境变量中传递文件即可。

为此,我删除了“ settings.py”文件,新文件结构如下所示:

mybackend/
 |-- mybackend/
 |    |-- __init__.py
 |    |-- settings/
 |    |    |-- __init__.py
 |    |    |-- base.py
 |    |    |-- dev.py
 |    |    |-- prod.py   
 |    |-- urls.py
 |    +-- wsgi.py
 +-- manage.py

以上设置中,该文件包含数据库属性,即用户,通过,主机和端口。

现在,我想在“模型”模块之外使用这些属性。有什么方法可以获取数据库属性文件? 或通过其他任何方式获取数据库属性并建立数据库连接。

我尝试读取默认设置并尝试动态加载

class ConnUtil:
    def __init__(self):
        self.file_name = os.environ.get("DJANGO_SETTINGS_MODULE")
        self.host = ""
        self.user = ""
        self.password = ""
        self.database = ""
        self.port = 3306

    # a class method to create a object.
    @staticmethod
    def get_conn():
        file_name = os.environ.get("DJANGO_SETTINGS_MODULE")

        env_file = "backend_jio_games.settings"
        name = file_name;
        name = name[name.rfind('.')+1:]
        print(">>>>>> %r" % name)
        if name == 'local':
            print("Local")
            env_file = env_file+".local.py"
        elif name == 'dev':
            print("Dev")
            env_file = env_file + ".dev.py"
        elif name == 'replica':
            print("Replica")
            env_file = env_file + ".replica.py"
        else:
            print("Prod")
            env_file = env_file + ".prod.py"

        print(">>>>>>>>>>" +env_file)
        import env_file
        #myConnection = pymysql.connect(host=hostname, user=username, passwd=password, db=database, port=port)  # Mysql Connection
        #return myConnection

但是我遇到类似“没有名为env_file的模块”之类的错误。

我想根据环境建立数据库连接。

预先感谢

以下解决方案对我有用

from django.conf import settings
from django.db import connections
from django.db.utils import OperationalError
import logging
logger = logging.getLogger('django')


class ConnUtil:

    def __init__(self):
        logger.debug("Conn Util Object created...")
        self.cursor = None

    # a class method to create a object.
    def get_dbcursor(self):
        logger.debug(">>>>>> %r" % settings.DATABASES)
        db_conn = connections['default']
        try:
            self.cursor = db_conn.cursor()
        except OperationalError:
            logger.error("Error in opening cursor>>>>>>")

        return self.cursor

    def close_dbcursor(self):
        logger.debug("closing cursor>>>>>>")
        if self.cursor:
            self.close_cursor()

0 个答案:

没有答案