view의 모든 기능
[공지사항] 지킬블로그 안내드립니다.
지킬 블로그에 대하여 알아보겠습니다.
이 코드는 Django 프로젝트의 settings.py 파일을 설정하는 내용입니다. 이 파일은 Django 프로젝트의 전반적인 설정을 관리합니다. 아래에서 각 설정 항목의 역할을 자세히 설명하겠습니다.
1. 기본 설정
from pathlib import Path
from decouple import config
import pymysql
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
BASE_DIR = Path(__file__).resolve().parent.parent.parent
from pathlib import Path: 파일 경로를 조작하기 위한Path클래스를 가져옵니다.from decouple import config: 환경 변수를 관리하기 위해decouple라이브러리의config함수를 가져옵니다.import pymysql: MySQL 데이터베이스에 연결하기 위해pymysql라이브러리를 가져옵니다.import os: 환경 변수 및 경로 조작을 위해os모듈을 가져옵니다.import ssl: SSL/TLS 인증서 처리를 위한ssl모듈을 가져옵니다.ssl._create_default_https_context = ssl._create_unverified_context: SSL 인증서 검증을 무시하도록 설정합니다. (보안에 주의 필요)BASE_DIR = Path(__file__).resolve().parent.parent.parent: 프로젝트의 기본 디렉토리 경로를 설정합니다.
2. Django 기본 설정
SECRET_KEY = config('SECRET_KEY', default='django-insecure-a3_d(puh2n+89zyudoz%)^cz14waicrb1$3$r+)1&y$p8-%0!w')
DEBUG = config('DEBUG', default=True, cast=bool)
ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=lambda v: [s.strip() for s in v.split(',')])
SECRET_KEY: Django의 보안 키로, 암호화 및 세션 관리를 위한 비밀 키입니다. 환경 변수로부터 가져오며, 기본값을 설정할 수 있습니다.DEBUG: 디버그 모드를 설정합니다. 개발 중에는True로 설정하고, 배포 시False로 변경합니다.ALLOWED_HOSTS: 허용된 호스트의 목록입니다. 웹 애플리케이션이 요청을 받을 수 있는 호스트를 설정합니다.
3. 앱 및 미들웨어 설정
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'rest_framework',
]
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',
]
INSTALLED_APPS: Django 프로젝트에서 사용할 앱을 등록합니다. 기본 제공 앱 외에myapp과rest_framework를 추가했습니다.MIDDLEWARE: 요청과 응답 처리 과정에서 사용할 미들웨어를 설정합니다. CSRF, 세션, 인증 등 다양한 미들웨어가 포함되어 있습니다.
4. 템플릿 설정
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'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',
],
},
},
]
TEMPLATES: Django 템플릿 엔진 설정입니다. 템플릿 디렉토리와 템플릿 컨텍스트 프로세서를 지정합니다.
5. 데이터베이스 설정
import os
AWS_ACCESS_KEY_ID = os.getenv('AWS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_BUCKET_NAME')
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config('DB_NAME', default='DB_NAME'),
'USER': config('DB_USER', default='DB_USER'),
'PASSWORD': config('DB_PASSWORD', default='DB_PASSWORD'),
'HOST': config('DB_HOST', default='DB_HOST'),
'PORT': config('DB_PORT', default='DB_PORT'),
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'"
}
}
}
try:
connection = pymysql.connect(
host=config('DB_HOST', default='DB_HOST'),
user=config('DB_USER', default='DB_USER'),
password=config('DB_PASSWORD', default='DB_PASSWORD'),
database=config('DB_NAME', default='DB_NAME'),
port=int(config('DB_PORT', default='DB_PORT'))
)
print("Connection successful")
except pymysql.MySQLError as e:
print(f"Error connecting to the database: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
- AWS 설정: AWS 관련 환경 변수 설정입니다.
pymysql.install_as_MySQLdb():pymysql을 MySQLdb로 사용하도록 설정합니다.DATABASES: MySQL 데이터베이스 설정입니다. 데이터베이스의 이름, 사용자, 비밀번호, 호스트, 포트 등을 설정합니다.try...except: 데이터베이스 연결을 테스트합니다. 연결 성공 여부를 출력합니다.
6. CSRF 및 인증 관련 설정
CSRF_TRUSTED_ORIGINS = config('CSRF_TRUSTED_ORIGINS', default='http://localhost:8000', cast=lambda v: [s.strip() for s in v.split(',')])
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',
},
]
CSRF_TRUSTED_ORIGINS: CSRF 보호를 위한 신뢰할 수 있는 출처를 설정합니다.AUTH_PASSWORD_VALIDATORS: 비밀번호 검증 규칙을 설정합니다. 다양한 비밀번호 검증기를 포함합니다.
7. 이메일 설정
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')
EMAIL_BACKEND: 이메일 백엔드를 설정합니다. SMTP 서버를 사용합니다.EMAIL_HOST,EMAIL_PORT,EMAIL_USE_TLS: SMTP 서버 설정입니다.EMAIL_HOST_USER,EMAIL_HOST_PASSWORD: 이메일 서버 로그인 정보입니다.
8. Django REST Framework 설정
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_FILTER_BACKENDS': [
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
],
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '1000/day',
},
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
DEFAULT_RENDERER_CLASSES: API 응답의 기본 렌더러 클래스를 설정합니다.DEFAULT_AUTHENTICATION_CLASSES: API 요청의 기본 인증 클래스를 설정합니다.DEFAULT_FILTER_BACKENDS: API 데이터 필터링에 사용할 기본 필터 백엔드를 설정합니다.DEFAULT_THROTTLE_CLASSES: 요청 속도 제한을 위한 기본 클래스입니다.DEFAULT_THROTTLE_RATES: 요청 속도 제한의 기본 속도를 설정합니다.DEFAULT_PAGINATION_CLASS: API 응답의 기본 페이지네이션 클래스를 설정합니다.PAGE_SIZE: 페이지당 항목 수를 설정합니다.
9. 미디어 및 정적 파일 설정
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False
STATIC_URL = 'static/'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
MEDIA_URL,MEDIA_ROOT: 업로드된 미디어 파일의 URL과 파일 시스템 경로를 설정합니다.LANGUAGE_CODE: 프로젝트의 기본 언어를 설정합니다.TIME_ZONE: 프로젝트의 기본 시간대를 설정합니다.USE_I18N: 국제화 사용 여부를 설정합니다.USE_TZ: 시간대 사용 여부를 설정합니다.STATIC_URL: 정적 파일의 URL 경로를 설정합니다.DEFAULT_AUTO_FIELD: Django 모델의 기본 자동 필드 유형을 설정합니다.
이 설정 파일은 Django 프로젝트의 핵심적인 설정을 다루며, 데이터베이스 연결, 미들웨어 설정, 이메일 설정 등 프로젝트의 전반적인 동작을 제어합니다. 각 설정 항목을 이해하고 올바르게 구성하는 것이 중요합니다.
Django의 설정 파일에서 ALLOWED_HOSTS
이 코드는 Django의 설정 파일에서 ALLOWED_HOSTS 설정을 재정의하고 있습니다. from .base import * 문은 base.py라는 다른 설정 파일에서 모든 설정을 가져와서 현재 설정 파일에 포함시키는 것입니다. 그 후, ALLOWED_HOSTS 값을 재정의하여 이 호스트들만 허용되도록 하고 있습니다.
자세히 설명하자면:
1. from .base import *
- 이 구문은 현재 설정 파일(예:
settings.py)에base.py에서 정의된 모든 설정을 가져옵니다. 이를 통해 공통 설정을 여러 설정 파일에서 재사용할 수 있습니다.
2. ALLOWED_HOSTS = ['3.36.151.186', 'localhost', '127.0.0.1']
ALLOWED_HOSTS: 이 설정은 Django 애플리케이션이 요청을 받을 수 있는 호스트의 목록을 정의합니다.ALLOWED_HOSTS에 포함되지 않은 호스트에서 들어오는 요청은 Django에 의해 차단됩니다.- 목록의 내용:
'3.36.151.186': 이 IP 주소는 Django 애플리케이션이 허용하는 호스트 중 하나입니다. 보통 서버의 퍼블릭 IP 주소입니다.'localhost': 로컬 개발 환경에서의 호스트 이름입니다.'127.0.0.1': 로컬호스트의 IP 주소입니다.'localhost'와 동일하게 로컬 환경에서 접근할 수 있습니다.
이 설정은 다음과 같은 목적을 가집니다:
- 보안:
ALLOWED_HOSTS설정을 통해 애플리케이션이 의도하지 않은 도메인에서 요청을 받지 않도록 보안성을 강화합니다. 이 설정을 적절히 구성하지 않으면 보안 취약점이 발생할 수 있습니다. - 호스트 제한: 실제 배포 시, 서버의 IP 주소나 도메인 이름을
ALLOWED_HOSTS에 추가하여, 오직 특정 도메인에서만 요청을 받아들일 수 있도록 제한합니다.
적용 예시
예를 들어, ALLOWED_HOSTS가 다음과 같이 설정되어 있다면:
ALLOWED_HOSTS = ['example.com', 'www.example.com', 'subdomain.example.com']
이 설정은 다음을 의미합니다:
example.com및www.example.com및subdomain.example.com에서 오는 요청만 허용됩니다.- 다른 도메인이나 IP 주소에서의 요청은 Django 서버가 차단합니다.
이 설정은 보안상의 이유로 반드시 설정해주어야 하며, 특히 실제 운영 환경에서는 DEBUG = False로 설정하고, ALLOWED_HOSTS를 적절히 구성하여 외부의 악의적인 접근을 방지하는 것이 중요합니다.
댓글남기기