Django - request에 대해 .get 으로 받는 방법과 ['key']로 받는 방법의 차이

full_accel·2020년 12월 20일
0

Django

목록 보기
1/1

결론

  • Error를 raise하냐 안하냐의 차이
  • headers에서 .get으로 받으면 Error를 raise 하지 않고 None을 리턴한다.
    • 따라서 값이 None 인 경우로 분기 처리해야 한다.
  • header에서 ['key']로 받으면 KeyError를 raise한다.
    • 따라서 try ~ except 로 KeyError를 처리해야 한다.

(예시)
프론트에서 전달받은 request의 header에서 "Authorization"이라는 키에 해당하는 값이 필요한 경우

headers에서 .get으로 받는 경우

  • heders에서 .get으로 뽑는 경우 헤더에 'Authorization' 이 없으면 access_token = None
  • 따라서 if access_token is None 등의 방식으로 분기 처리해야 클라이언트에 적절한 메세지 전달 가능
access_token = request.headers.get('Authorization')

if not access_token:  # access_token은 None을 리턴, python은 조건문에서 None도 False로 처리
    return JsonResponse({"message": "KEY_ERROR"}, status=400)

headers에서 ['key']로 받는 경우

  • heders에서 ['key']로 뽑는 경우 헤더에 'Authorization' 이 없으면 KeyError가 raise된다.
  • 따라서 이경우 try except 로 KeyError 받아야 클라이언트에 적절한 메세지 전달 가능
try:
    access_token = request.headers['Authorization']
except KeyError:
    return JsonResponse({"message": "KEY_ERROR"}, status=400)
profile
스스로 배운 것이 오래 간다.

0개의 댓글