В эти дни я изучаю, как программировать на BAE. BAE - облачная платформа, такая как GAE. Он поддерживает python 2.7 и MySQL. Но есть проблема, BAE предоставляет DATABASE
информацию в запросе. Я могу получить эти настройки, как это:Как настроить параметры Django DATABASES во время выполнения?
port = request.META['HTTP_BAE_ENV_ADDR_SQL_PORT']
, но как я могу настроить параметры DATABASES
во время выполнения?
Я попытался написать промежуточное программное обеспечение для этой проблемы, как это:
from django.conf import settings
class bae_database(object):
def process_request(self, request):
BAE_DB = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'django', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
},
}
settings.DATABASES = BAE_DB
Затем в settings.py
файл я добавить связующее ПО MIDDLEWARE_CLASSES
и установить DATABASES = {}
. В результате я получаю сообщение об ошибке:
You haven't set the database ENGINE setting yet.
На самом деле работает промежуточные, потому что в настройках части страницы ошибок Django я получаю:
DATABASES
{'default': {'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'NAME': 'django', 'PASSWORD': '********************', 'PORT': '3306', 'USER': 'root'}}
Я не знаю, почему, изменил атрибут DATABASES
, но он бесполезен. Пожалуйста, помогите мне.
django будет подключаться к базе данных с момента запуска только при установке DATABASE = {}. тестовое значение - это конфигурация работоспособности для моего компьютера. Если я устанавливаю DATABASES для проверки значения, у него нет проблем. но на BAE я могу просто получить конфигурацию из запроса. – mata
, так что бессмысленно устанавливать статическую настройку – mata
да, но я говорю, что в 'settings.py' вы должны установить' DATABASE' непустое, действительное значение. Вы можете изменить его в промежуточном программном обеспечении, но вы должны иметь * что-то * в 'DATABASES', когда вы запускаете другой Django, отказываетесь от запуска. – scytale