공식문서
django-hosts
필요 지식
Sub Domain
- 보조 도메인으로써, URL로 전송하거나 계정 내의 IP 주소나 디렉토리로 포워딩되는 도메인 이름의 확장자
www.mysite.com/mail
을 서브 도메인을 활용해 mail.mysite.com
으로 작성할 수 있다.
- 사이트의 고유한 영역을 만들기 위해 서브 도메인을 활용해 기억하기 쉬운 주소를 만들 수 있다.
정의
- 특정 호스트에 대한 요청을
hostconfs
라는 모듈에 정의된 다른 URL 체계로 라우팅한다.
- 예를 들어,
mysite.com
에서 api.mysite.com
과 beta.mysite.com
에서 다루는 구체적인 콘텐츠가 다르다면 아래와 같이 hosts.py
를 작성하면 된다.
from django_hosts import patterns, host
host_patterns = patterns('path.to',
host(r'api', 'api.urls', name='api'),
host(r'admin', 'admin.urls', name='admin'),
)
- 위와 같이 설정하게 되면,
{api, admin}.mysite.com
로 request가 들어오게 되고 각자에게 맞는 URLconf로 라우팅된다.
urls.py
를 hostconfs에 대한 템플릿으로 사용할 수 있다.
- 패턴들은 순서대로 평가되며, 맞는 패턴이 없다면 standard
ROOT_URLCONF
로 연결되게 된다.
사용방법
- 아래의 명령어를 통해 django-hosts를 설치해 사용한다.
requirements.txt
를 통해 버전관리를 진행한다.
$ pip install django-hosts
django-hosts
를 INSTALLED_APPS
세팅에 추가한다.
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
"django_hosts",
]
- 맨 위에
"django_hosts.middleware.HostsRequestMiddleware",
와 맨 아래에 "django_hosts.middleware.HostsResponseMiddleware",
를 MIDDLEWARE
에 추가한다.
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",
"django_hosts.middleware.HostsResponseMiddleware",
]
- 디폴트 host patterns를 포함하는 새로운 모듈을 생성한다.
from django_hosts import patterns, host
host_patterns = patterns(
"",
host("api", "config.urls.api", name="api"),
host("admin", "config.urls.admin", name="admin"),
)
settings.py
에 다음과 같이 ROOT_HOSTCONF
를 작성한다.
settings.py
에 다음과 같이 DEFAULT_HOST
를 작성한다.
- 아무런 패턴 매치가 일어나지 않거나 host_url template tag에 이름을 부여하지 않은 경우 사용된다.
DEFAULT_HOST = "api"
ROOT_HOSTCONF = "config.hosts"
ROOT_URLCONF = "config.urls.api"