이번 온보딩 과제를 하면서 어렴풋이 이런 메소드야 정도로 알고있던 get과 GET의 차이에 대해 정확히 알아야겠다는 생각이 들었다. API를 작성하는데 내가 원하지 않던 결과값이 한 번씩 나오다 보니 정확히 이해하지 않고 쓰는 메소드는 결국에 좋지 않은 결과를 불러오는 것 같다. 요즘 프로그래머스 1일 1알고리즘을 커밋하는데 hash에 대해서도 찾다보니 적용에 더욱 도움이 된 것 같다.
python 자체 메소드인 get
get은 python에서 제공하는 메소드 중에 하나이다. 사전형 객체의 데이터를 받아서 Key값을 입력할 경우 Value값을 반환해 주는 메소드이다.
get 메소드는 사전형 객체만 사용할 수 있다는 점을 기억하자!
a = {1:'a', 2:'b', 'c':3}
a.get(1)
>>>'a'
기본 형태는 아래와 같다. 물론 a[1]의 형태로도 같은 결과값을 얻을 수 있다.
다음에 GET에 대해 설명할 때 나오겠지만, python의 get 메소드는 Key값이 존재하지 않을 경우 default값으로 None을 반환 해주거나 사용자가 따로 설정한 값으로 Value값이 반환된다.
a = {1:'a', 2:'b', 'c':3}
a.get(3) or a.get(3, None)
>>>None
a.get(3, 'z')
>>>'z'
위와 같이 request.get(a, b) 에서 a가 dictionary의 Key값이 되고, b가 Key값이 존재하지 않을 경우 반환되는 Value값이 된다.
django에서 사용하는 request.GET
request.GET은 http통신에서 사용할 수 있다. request는 http에서 request를 보냈을 때 request에 담긴 Json 데이터를 이용하여 django가 만든 객체이고, request.GET을 통해 request를 사전형 객체로 만들 수 있다.
http:localhost:8000/user?name=minseok
def get(request):
name = request.GET['name']
return name
>>> 'minseok'
def get(request):
age = request.GET['age']
return age
>>>MultiValueDictKeyError
위와 같이 사용할 수 있다. 하지만, request.GET은 get 메소드와 달리 default 값이 존재하지 않는다. Key값이 존재하지 않을 경우에는 에러가 발생한다. 상황에 따라 Key값이 존재하지 않아도 default값을 필요로 하는 경우가 있는데, 그 때 사용하는 것이 request.GET.get이다.
http:localhost:8000/user?name=minseok
def get(request):
age = request.GET.get('age')
return age
>>>None
def get(request):
age = request.GET.get('age', '30')
return age
>>>30
http request를 request.GET을 통해 사전형 객체로 만들고, get 메소드를 사용하여 python의 get처럼 사용할 수 있다.
코드 하나하나가 어떤 의미를 담고 있는지를 알아보고 상황에 따라 필요한 곳에 적재적소로 활용하자.
[출처]