오설록 클론 코딩을 하면서 데코레이터를 사용해 보게 되었다.
개념부터 찬찬히 훑어보고 코드를 짜려고 정리를 해보았다.
TimeStamp모델을 위해 만들었던core라는 앱에 utils.py에 파일을 따로 생성해주었다.
#먼저 모듈들을 import해준다.
from django.http        import JsonResponse
from users.models       import User
from django.conf        import settings
def login_decorator(func):
    def wrapper(self, request, *args, **kwargs):
        try:
            access_token = request.headers.get('Authorization')
            #HTTPRequest의 헤더인 Authorization의 값을 가져온다.
            payload      = jwt.decode(access_token, settings.SECRET_KEY, settings.ALGORITHM)
            #토큰을 디코딩하면 나오는 사용자 정보이다. 디코딩에 사용되는 SECRET_KEY, ALGORITHM이 토큰 발행 시 넣은 정보와 동일해야 한다.
            user_id      = payload['id']
            #user_id에 payload에서 디코딩해서 나온 사용자 정보를 저장한다.
            request.user = User.objects.get(id = user_id)
            #request에 user변수를 저장한다. user변수에는 user_id와 일치하는 DB의 User 테이블의 사용자 정보를 넣어준다.
            
            return func(self, request, *args, **kwargs)
        except jwt.exceptions.DecodeError:
            return JsonResponse({ 'message' : 'INVALID_TOKEN' }, status = 400)
            #우리에게 없는 토큰 값이 들어오면 INVALID_TOKEN 에러를 반환한다.
        
        except KeyError:
            return JsonResponse({ 'message' : 'KEY_ERROR' }, status = 400)
    return wrapper