Django Custom Dynamic urlpatterns

Я работаю над проектом django и в этом проекте у меня есть два подпроекта. В данном случае я хочу хранить домены и назначать сервисы (мои подпроекты) этим доменам.

Например, допустим, у меня есть сервис1 и сервис2. И в таблице доменов я храню:

service1.domain.com -> service1
domainforservice1.com -> service1
service2.domain.com -> service2
domainforservice2.com -> service2

что-то вроде этого. В этом случае я столкнулся с некоторыми проблемами, потому что я хочу контролировать домен, к которому поступает запрос, и в соответствии с этим доменом я могу найти, какой сервис мне следует загрузить на главном пути. Итак, в основном мы хотим сделать такой элемент управления:

if domain.service = service1:
    urlpatterns += path('', service1.urls)
if domain.service = service2:
    urlpatterns += path('', service2.urls)

Но проблема в том, что поскольку мы не можем взять домен в этой области из запроса, мы не можем сделать этот контроль. Я попытался написать промежуточное ПО для этого и получил адрес домена в request.domain, но снова возникла проблема, потому что промежуточное ПО выполняется до этого файла urls.py. Так что в этом случае я застрял и не могу найти решение, чтобы решить эту проблему.

django поддерживает несколько сайтов с помощью фреймворка sites framework. https://docs.djangoproject.com/en/5.0/ref/contrib/sites/

# site1 settings.py
SITE_ID = 1
ALLOWED_HOSTS = [aaa.com]

$ python manage.py runserver --settings={site1.settings}
# site2 settings.py
SITE_ID = 2
ALLOWED_HOSTS = [bbb.com]

$ python manage.py runserver --settings={site2.settings}

и

from django.contrib.sites.shortcuts import get_current_site
from django.http import Http404
def my_view(request):
    current_site = get_current_site(request)
    if current_site.domain == "foo.com":
        # Do something
    else:
        raise Http404

или

# views.py
from django.conf import settings
from django.http import Http404
def some_view(request, *args):
  if settings.SITE_ID == 3:
    # do something
  else:
    raise Http404

https://docs.djangoproject.com/en/5.0/ref/contrib/sites/#hooking-into-the-current-site-from-views

Вернуться на верх