Я создаю блог, используя Django, и я внедрил инструмент анализа, который позволяет мне отображать подробную информацию о моих посетителях (country_origin, device, browser, ...).
анализ.localhost: 8000 - это поддомен localhost , определенный как представление на основе классов с пользовательским Mixin SuperuserAccessRequired , который возвращает 401 Unauthorized , если пользовательне персонал (я использую django-hosts для обработки поддоменов, и я впервые работаю с поддоменами.).
Моя проблема:
, если я вошел в системуна localhost: 8000 и перейдите к analysis.localhost: 8000 я получаю 401 ответ .
You are seeing this as: AnonymousUser # generated by print(You are seeing this as: ', request.user) from SuperuserAccessRequired
Unauthorized: /
[25/Sep/2019 13:14:03] "GET / HTTP/1.1" 401 89
мое скромное предположение говоритчто localhost: 8000 и x.localhost: 8000 не разделяют определенные переменные.
Как я могу исправить эту проблему, я прочитал документацию django-hosts, например 5уже раз, и я не могу найти то, что мне не хватает
мой сотрудникde:
project / root / settings.py
...
ALLOWED_HOSTS = ['localhost']
ALLOWED_HOSTS += ['analysis.localhost', 'blog.localhost']
SITE_ID = 1
INSTALLED_APPS += [
# Django Apps
'blog',
'analysis',
]
INSTALLED_APPS += [
# Django Dependencies
'sass_processor',
'django_hosts',
]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'analysis.middleware.TrackVisitorMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
]
ROOT_URLCONF = 'root.urls'
ROOT_HOSTCONF = 'root.hosts'
BLOG_URLCONF = 'blog.urls'
ANALYSIS_URLCONF = 'analysis.urls'
DEFAULT_HOST = 'www'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'analysis': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'analysis_db.sqlite3'),
}
}
...
project / root / hosts.py
host_patterns = patterns('',
host(r'localhost:8000', settings.ROOT_URLCONF, name='www'),
host(r'analysis.localhost:8000', settings.ANALYSIS_URLCONF, name='analysis'),
host(r'blog.localhost:8000', settings.BLOG_URLCONF, name='blog'),
)
Пользовательский миксин:
class SuperuserAccessRequired(AccessMixin):
"""Verify that the current user is staff."""
def dispatch(self, request, *args, **kwargs):
print('You are seeing this as: ', request.user)
if not request.user.is_staff:
return HttpResponse(status=401, content='You are not authorized to view this page.')
return super().dispatch(request, *args, **kwargs)
ОБНОВЛЕНИЕ
Если я удаляю номер порта из analysis.localhost , я перенаправляюсь на страницу Apache по умолчанию ... странно.(просто отмените это обновление, которое я забыл о / etc / hosts, человек, которого я теряю)
ОБНОВЛЕНИЕ 2
Копаем глубже в вопросе, похоже, что я долженпереписать мой SessionMiddleware.
Буду признателен за любую помощь / руководство.