[Django] 장린이 RESTAPI 만들기 삽질1탄

happypath·2021년 12월 8일
0

Django

목록 보기
7/7

N시간만에 나온 삽질의 결과물이 감격의 순간 먼저보고 가실게요 꺄올

1. 설치설치이~!

필요한 패키지들 설치하자

pip3 install django-rest-auth 
pip3 install django-allauth 
pip3 install django-rest-framework 
pip3 install django-cors-headers 
pip3 install djangorestframework-jwt

** 수정 **
djangorestframework-jwt는 이제 더 이상 업데이트가 되지 않아서(deprecated), 최신 버전의 장고로 작업을 하다보니 에러가 발생.... 후... 이거때문에 삽질을 참 오래했다.
마음편히 장고에서도 권장하는 "djangorestframework-simplejwt"로 설치하자.
pip3 install djangorestframework-simplejwt

2. 추가추가아-!

앞서 설치한 패키지들을 우리가 사용할 것이라고 장고한테 알려줘야 한다.
'INSTALLED_APPS' 와 'MIDDLEWARE'를 수정해 준다.

#settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'django.contrib.sites',
    'rest_auth',
    'rest_auth.registration',

    'allauth',

    'rest_framework',
    'rest_framework.authtoken',
    'corsheaders',

    'webtoons',
]


MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
   .
   .
   .
]

3. CORS 설정해주기

settings.py에 cors 관련 설정을 추가해 준다.

#settings.py
#cors관련 셋팅
from corsheaders.defaults import default_methods

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = [
    "http://127.0.0.1:8000",
    "http://localhost:8000",
]
CORS_ALLOW_METHODS = list(default_methods) + [
    "",
]

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'access-control-request-method',
    'access-control-request-headers',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

4. JWT 설정하기

settings.py에 추가

REST_FRAMEWORK = {
    # 'DEFAULT_PERMISSION_CLASSES': ( #로그인여부확인, 유효한 유저만 접근가능하도록 설정
    #     'rest_framework.permissions.IsAuthenticated',
    # ),
    'DEFAULT_AUTHENTICATION_CLASSES': ( #인증방식클래스설정
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}
SITE_ID = 1 #Admin 페이지 관리번호 로 단일한 서버는 1번

REST_USE_JWT = True

AUTH_USER_MODEL = 'users.User'
JWT_AUTH = {
    'JWT_SECRET_KEY': os.environ.get('SECRET_KEY2'),
    'JWT_ALGORITHM': 'HS256',
    'JWT_ALLOW_REFRESH': True,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=6),
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
  • SITE_ID : 'django.contrib.sites'가 앱에 추가 되어서, admin페이지 번호를 알려주는 것.
  • 'DEFAULT_PERMISSION_CLASSES' : default로 설정해 줄 경우 API요청이 토큰 없이는 안됨. 나는 앱별로 설정해 주고자 위에서는 주석처리함.
  • JWT_AUTH : JWT 토큰 관련 설정. 토큰 유지는 6시간으로, 7일 후에는 무조건 토큰 만료

0개의 댓글