ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] setting.py 파헤치기 #2
    파이썬/Django 2021. 3. 5. 16:33

    MIDDLEWARE

    MIDDLEWARE = [
    	"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",
    ]

    SecurityMiddleware

    보안 미들웨어는 request/response 싸이클에 향상된 보안 기능을 제공한다. 각각의 기능들은 독립적으로 enable, disable 가능하다.

    • SECURE_BROWSER_XSS_FILTER (Default: False) : True로 지정하면 모든 응답 헤더에 X-XSS-Protection: 1;mode=block가 추가된다. 최신 브라우저는 더 이상 이 헤더를 따르지 않는다. 이 헤더가 실질적으로 이점이 거의 없지만 오래된 브라우저를 지원하는 경우에 설정해주는 것이 좋다.

    • SECURE_CONTENT_TYPE_NOSNIFF (Default: True): True로 지정하면 모든 응답 헤더에 X-Content-Type-Options: nosniff가 추가된다. HTML, Javascript로 만들어진 파일을 업로드 할 수 있을 때 악의적인 사용자가 위험한 파일들을 업로드할 수 있다. 이 헤더는 MIME 타입의 스니핑을 방지한다.

    HTTP Strict Transport Security(HSTS)

    오직 https에서 액세스해야 하는 경우에 이 헤더를 설정하여 최신 브라우저가 안전하지 않은 연결(주어진 기간동안)을 통해 도메인 이름에 대한 연결을 거부하도록 할 수 있다.

    • SECURE_HSTS_INCLUDE_SUBDOMAINS: 서브도메인에도 이 헤더를 추가시킬 수 있다.
    • SECURE_HSTS_PRELOAD: True로 지정하면 preload list에 등록되어 브라우저가 이 도메인에 안전하지 않은 연결을 하지 않게 된다.
    • SECURE_HSTS_SECONDS: 웹브라우저가 HSTS 헤더를 볼 때 마다 주어진 기간동안 비보안 통신을 거부한다.
    • SECURE_REDIRECT_EXEMPT: url이 이 리스트의 정규식과 일치하면 https로 리디렉션되지 않는다.
    • SECURE_REFERRER_POLICY: Referrer Policy 헤더에 추가되어 응답된다.
    • SECURE_SSL_HOST: 모든 SSL 리디렉션들이 원래의 요청 호스트로 리디렉션되는 것이 아니라 여기에 설정된 호스트로 리디렉션된다.
    • SECURE_SSL_REDIRECT(Default: False): True면 http가 아닌 요청들은 https로 리디렉션된다.

    SessionMiddleware

    세선을 지원해준다.

    CommonMiddleware

    • DISALLOWED_USER_AGENT: 이 사용자 에이전트에 대한 액세스를 금지시킨다.
    • APPEND_SLASH: True면, 초기 url 끝에 백슬래시(/)가 붙지 않는다.
    • PREPEND_WWW: True면, www가 없는 url은 www이 붙어서 리디렉션된다.

    CsrfViewMiddleware

    Csrf에 대해서 보호해주는 미들웨어이다.

    AuthenticationMiddleware

    모든 요청되는 HttpRequest 객체에 현재 로그인되어있는지 나타내는 user객체가 담겨있다.

    MessageMiddleware

    꼭 세션 미들웨어 뒤에 추가해주어야한다. 이유는 세션기반 미들웨어이기 떄문이다.

    XFrameOptionsMiddleware

    X-Frame-Options 헤더와 함께 클릭재킹에 보호해주는 미들웨어이다.

    ROOT_URLCONF

    ROOT_URLCONF = "config.urls"

    Root url을 구성하는 string

    TEMPLATES

    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "DIRS": [],
            "APP_DIRS": True,
            "OPTIONS": {
                "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                ],
            },
        },
    ]

    템플렛 엔진을 사용하기 위한 설정들이 들어있다.

    BACKEND

    사용할 템플릿 백엔드를 세팅한다. 기본 제공 템블릿 백엔드는 DjangoTemplates과 Jinja2가 있고 따로 사용자가 경로를 지정하고 오픈소스를 사용할 수도 있다.

    DIRS

    엔진이 템플릿 소스파일을 찾아야하는 디렉토리 경로이다.

    APP_DIRS

    엔진이 설치된 애플리케이션 내에서 템플릿 소스파일을 찾아야하는지 여부이다.

    OPTIONS

    엔진에게 전달할 추가 매개변수이다.

    WSGI_APPLICATION

    WSGI_APPLICATION = "config.wsgi.application"

    장고가 사용할 wsgi 애플리케이션의 경로이다.

    DATABASES

    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": BASE_DIR / "db.sqlite3",
        }
    }

    장고가 사용할 데이터베이스를 설정하는 부분이다.
    sqlite3이외의 데이터베이스를 사용하려면 추가적으로 데이터베이스에 필요한 파라미터들을 넣어주어야한다.

    만약 postresql을 사용한다면

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'mydatabase',
            'USER': 'mydatabaseuser',
            'PASSWORD': 'mypassword',
            'HOST': '127.0.0.1',
            'PORT': '5432',
        }
    }

    AUTH_PASSWORD_VALIDATORS

    AUTH_PASSWORD_VALIDATORS = [
        {
            "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
        },
        {
            "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
        },
        {
            "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
        },
        {
            "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
        },
    ]

    패스워드의 보안 강도를 체크하는 validatar 리스트이다.

    LANGUAGE_CODE

    LANGUAGE_CODE = "en-us"

    이 설치에 대한 언어 코드를 나타낸다. 표준 언어 ID 형식이어야 한다.USE_I18N이 꼭 True이어야 한다.

    TIME_ZONE

    TIME_ZONE = "Asia/Seoul"

    설치된 곳의 time zone을 나타낸다. 반드시 서버의 시간대는 아니다. 하나의 서버가 각각 별도의 시간대 설정이 있는 장고 기반 사이트를 제공할 수 있다.

    USE_I18N

    USE_I18N = True

    장고의 번역 시스템을 활성화 하는지의 여부이다.

    USE_L10N

    USE_L10N = True

    locaization된 데이터 형식을 활성화하는지 안하는지의 여부이다. True라면, 장고는 현재 위치에 맞춰진 숫자와 날짜를 보여준다.

    USE_TZ

    USE_TZ = True

    True면, 장고는 내부적으로 날짜 / 시간을 사용한다.

    STATIC_URL

    STATIC_URL = "/static/"

    정적파일들을 참조할 때 사용하기 위한 url이다.

    AUTH_USER_MODEL

    AUTH_USER_MODEL = "auth.User"

    유저를 나타내기 위해 사용될 모델이다.

    댓글

Designed by Tistory.