현재 instagram 어플의 백엔드 영역을 만들고 있다. 완전하지 않지만 작성하면서 나타났던 에러나 몰랐던 것들을 위주로 작성하고 그 후에 merge가 되면 그 때 코드 전체를 리뷰하도록 하자.
User/views.py
... class SignUpView(View): def post(self, request): data = json.loads(request.body) # 딕셔너리 형태로 data에 저장된다. ... else: # 데이터베이스에 저장된 정보를 찾기 위해 filter를 사용했다. if User.objects.filter(phone_number = _phone_number): return JsonResponse({'message':'Phone_number is already used'})
data
의 형태가 딕셔너리 형태로 저장되기 때문에 데이터가 들어왔는지 확인하고 데이터를 원하는 조건과 비교를 할 때 key
값이 들어왔는지, 키 값을 통해 value에 접근하는 등의 작업이 가능하다.
다음은 filter()
와 get()
의 차이점에 대해 공부해야 했다. filter()
대신 get()
을 사용했을 때 몇몇 경우에 있어서 DoesNotExist
예외가 발생했다.
filter(**kwargs)
주어진 조회 매개 변수와 일치하는 객체를 포함하는 새로운 QuerySet
을 반환합니다. filter()
를 사용하는 경우 일반적으로 기준과 일치하는 둘 이상의 객체를 기대할 때마다이 작업을 수행합니다. 기준과 일치하는 항목이 없으면 filter()
는 오류를 발생시키지 않고 빈 queryset
을 반환합니다.
get(**kwargs)
주어진 조회 매개 변수와 일치하는 객체를 반환합니다.이 조회 매개 변수는 필드 조회에 설명된 형식이어야합니다. get()
은 여러 객체를 찾은 경우 MultipleObjectsReturned
를 발생시킵니다. MultipleObjectsReturned
예외는 모델 클래스의 속성입니다.
지정된 매개 변수에 대해 개체를 찾을 수 없으면 get()
은 DoesNotExist
예외를 발생시킵니다. 이 예외는 모델 클래스의 속성이기도합니다. get()
을 사용하면 기준과 일치하는 항목이 하나만 있어야합니다. 항목이 없거나 기준과 일치하는 여러 항목이있는 경우 오류가 발생합니다. 따라서 예외를 올바르게 처리하려면 try .. except ..
블록이나 get_object_or_404
와 같은 바로 가기 기능을 사용하는 경우 항상 사용해야합니다.
기본적으로 하나의 객체를 얻고자 하면 get()
, 검색하는 매개 변수와 일치하는 모든 개체를 얻고자 하면 filter()
를 사용한다.