django-hosts

nikevapormax·2022년 9월 19일
0

TIL

목록 보기
99/116
post-custom-banner

공식문서

django-hosts

필요 지식

Sub Domain

  • 보조 도메인으로써, URL로 전송하거나 계정 내의 IP 주소나 디렉토리로 포워딩되는 도메인 이름의 확장자
  • www.mysite.com/mail을 서브 도메인을 활용해 mail.mysite.com으로 작성할 수 있다.
  • 사이트의 고유한 영역을 만들기 위해 서브 도메인을 활용해 기억하기 쉬운 주소를 만들 수 있다.

정의

  • 특정 호스트에 대한 요청을 hostconfs라는 모듈에 정의된 다른 URL 체계로 라우팅한다.
  • 예를 들어, mysite.com에서 api.mysite.combeta.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-hostsINSTALLED_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를 포함하는 새로운 모듈을 생성한다.
    • 예를 들어 hosts.py 파일을 생성한다.
from django_hosts import patterns, host  # django_hosts의 urls와 같은 역할

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"
profile
https://github.com/nikevapormax
post-custom-banner

0개의 댓글