카테고리 없음
파이썬 decorator 함수 활용
JOOHUUN
2022. 5. 18. 21:16
decorator함수란?
반복되는 함수를 줄여서 사용이 가능하다.
사용자 토큰을 받아 인증하는 시스템에서 사용자는 CRUD의 작업을 하려면 본인확인이 필요한데
토크인증 함수를 매번 API에 풀어 쓰면 문장도 길어질 뿐더러 매인 API 가독성이 떨어진다
1. 아래처럼 데코레이션 함수를 만들어준다.
def authorize(f):
def decorated_function():
if not 'Authorization' in request.headers:
abort(401)
token = request.headers['Authorization']
try:
user = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
except:
abort(401)
return f(user)
return decorated_function
2. userinfo를 받아 오는 api에서의 데코레이트 함수의 추가 전,후를 비교하면 끄덕끄덕
3. 이대로 실행하면 알수없는 오류 발생
원인은 한가지 함수를 여러가지 로직에 넣어서 그렇다고 한다
4. 위의 오류 해결 방법은 1번에서 만들었던 def authorize(f) 함수 밑에 @wrpas(f) 추가하면 된다. 임포트도 해주면 정상적으로 실행 이된다.
from functools import wraps
def authorize(f):
@wraps(f) ## 요거 추가
def decorated_function():
if not 'Authorization' in request.headers:
abort(401)
token = request.headers['Authorization']
try:
user = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
except:
abort(401)
return f(user)
return decorated_function
5. 포스트맨으로 토큰을 확인해보자. 위에 key, value 값을 입력고 SEND하면 2번에서 작성한 result의 email이 성공적으로 출력되며 콘솔창에 _id값과 exp가 출력된다