Я пытаюсь выбрать базу данных динамически с помощью промежуточного программного обеспечения (которое устанавливает переменную в threading.local) и dbrouter (который устанавливает базу данных в зависимости от переменной, заданной в threading.local).Ошибка с промежуточным программным обеспечением django
Код продолжается так:
import re
import threading
request_cfg = threading.local()
class RouterMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
pattern = re.compile("\\b(http://|https://|www.|.com|8000|:|//)\\W\\d+", re.I)
words = request.get_host()
db_name = [pattern.sub("", words)][0].split('.')[0]
request_cfg.cfg = db_name
return None
def process_response(self, request, response):
if hasattr(request_cfg, 'cfg'):
del request_cfg.cfg
return response
class DatabaseRouter (object):
def _default_db(self):
if hasattr(request_cfg, 'cfg'):
return request_cfg.cfg
else:
return 'default'
def db_for_read(self, model, **hints):
return self._default_db()
def db_for_write(self, model, **hints):
return self._default_db()
Мой Список MIDDLEWARE_CLASSES выглядит следующим образом:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'subdomains.middleware.SubdomainURLRoutingMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'oscar.apps.basket.middleware.BasketMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'catalogue.middleware.RouterMiddleware',
)
Но есть что-то не так с middleware.Like даже после выполнения входа (запрос, пользователь), пользователь не установлен в запросе, то есть пользователь по-прежнему анонимный.
Удаление промежуточного программного обеспечения решает мою проблему. I.e пользователь получает заданный запрос.
Надеюсь, что-то не так с промежуточным ПО, но я не могу понять, что! скажите, пожалуйста, что случилось с этим кодом. Спасибо.
, пожалуйста, поделитесь списком 'MIDDLEWARE_CLASSES' в' settings.py' – sax
См. Обновленный вопрос @sax –