https://velog.io/@doondoony/python-functools-wraps 와
https://cjh5414.github.io/wraps-with-decorator/ 의 내용을 보고 정리한 글
functools 의 wraps --> python decorator에 적용하는 함수
from functools import wraps
위와 같이 import해서 사용할 수 있음
위의 함수를 import하고 decorator위에 @wraps(func)라는 데코레이터를 하나 달아주면 됨
wraps를 사용하지 않고 decorator를 사용하는 경우
데코레이터가 원래의 함수를 감싸기 때문에 원래의 함수의 이름이 아닌 decorator의 이름을 식별자로 가지게 됨
따라서 flask의 경우에는 route를 실행할 때 다른 함수이지만 하나의 함수(decorator이름을 가진 함수)로 정의하게 되고 에러를 발생시킴
또한 디버깅하기 힘든 문제가 생김
이러한 것을 막기 위하여 functools.wraps를 사용
import jwt
from flask import request, jsonify
from my_settings import SERCRET, HASH_ALGORITHM
def login_required(func):
def wrapper(*args, **kwargs):
try:
token = request.headers['Authorization']
decoded_token = jwt.decode(token, SERCRET, HASH_ALGORITHM)
import jwt
from flask import request, jsonify
from functools import wraps
from my_settings import SERCRET, HASH_ALGORITHM
def login_required(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
token = request.headers['Authorization']
decoded_token = jwt.decode(token, SERCRET, HASH_ALGORITHM)
위의 사용 예시와 같이 간단하게 사용할 수 있음!
위의 wraps를 사용하게 되면 함수의 이름을 제대로 된 함수 이름으로 인식하여서 디버깅 등에 편의가 생김!