Api.urls не работают после использования django-hosts для поддомена
я пытаюсь использовать поддомен для api в моем проекте и использую django-hosts для этого. но после реализации этого, как указано в документации, появляется ошибка Page not found (404), когда я обращаюсь к любому URL моего приложения 'api'
project/hosts.py
from django_hosts import patterns, host
from django.conf import settings
host_patterns = patterns('',
host(r'www', settings.ROOT_URLCONF, name='www'),
host(r'api', 'apps.api.urls', name='api'),
)
project/settings.py
def ip_addresses():
ip_list = []
for interface in netifaces.interfaces():
addrs = netifaces.ifaddresses(interface)
for x in (netifaces.AF_INET, netifaces.AF_INET6):
if x in addrs:
ip_list.append(addrs[x][0]['addr'])
return ip_list
ALLOWED_HOSTS = ip_addresses()
ALLOWED_HOSTS.append('.localdemo.in')
ALLOWED_HOSTS.append('.api.localdemo.in')
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'apps.core',
'apps.api',
# Third party
'django_hosts',
]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'drf_api_logger.middleware.api_logger_middleware.APILoggerMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
]
ROOT_URLCONF = 'project.urls'
ROOT_HOSTCONF = 'project.hosts'
DEFAULT_HOST = 'www'
project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.core.urls')),
]
handler404 = "apps.core.views.customerrors.custom_handler404"
handler403 = "apps.core.views.customerrors.custom_handler403"
apps/api/urls.py
from django.urls import path, include, re_path
from django.conf.urls import url
from .views import statisticsview
urlpatterns = [
path('v1/statistics', statisticsview.StatisticsListView.as_view(), name='statistics_list'),
re_path(r'^statistics/$', statisticsview.StatisticsListView.as_view(), name='statistics_list'),
re_path(r'statistics/', statisticsview.StatisticsListView.as_view(), name='statistics_list'),
файл hosts внутри windows/system32/drivers/etc/hosts
127.0.0.1 localdemo.in
127.0.0.1 api.localdemo.in
теперь, когда я обращаюсь к localdemo.in:8000, он работает нормально, но я не могу получить доступ к api.localdemo.in:8000/v1/statistics/ там ошибка page not found, и я не знаю почему, пробовал все urlpatter, написанные в api/urls.py
работает только URL, в котором путь URL пуст, как этот на api.localdemo.in:8000, но другие не работают (ошибка page not found на api.localdemo.in:8000/v1/statistics/)
re_path('', statisticsview.StatisticsListView.as_view(), name='statistics_list'),