TIL DAY 17-2 || Django Q

TK·2021년 3월 8일
1

TIL

목록 보기
23/55
post-thumbnail

Q는 django 내부 orm 으로 where 절에 or 문 혹은 and 문을 추가하고 싶을 때 사용한다.

다음은 로그인 검사 시 User 테이블에서 email, phone_number, username 중 하나와 비밀번호를 입력받았을 때 해당되는 정보가 없으면 INVAILD_USER 를 리턴하는 코드의 일부를 가져와봤다.

from django.db.models import Q

is_valid_account = User.objects.filter((Q(email=email) | Q(username=username) | Q(phone_number=phone_number)) & Q(password=password)).exists()
            if not is_valid_account:
                return JsonResponse({'message': 'INVALID_USER'}, status=401)
  • User.objects.filter((Q(email=email) | Q(username=username) | Q(phone_number=phone_number))

이 표현식은 다음과 완벽하게 동일하다.

User.objects.filter(email=email) | User.objects.filter(username=username) | User.objects.filter(phone_number=phone_number)

이걸 Q 객체를 사용해서 위 코드와 같이 간편하게 표현할 수 있는 것이다.

  • Q(password=password))
    User.objects.filter(password=password) 로 풀어쓸수 있다.

이제 앞에 or 연산으로 계산해서 나온 컬럼(들) 과
뒤에 패스워드를 & 연산으로 계산하면 매칭하는 결과 값이 나올것이다.

안나오면 로그인 실패이다.

profile
Backend Developer

0개의 댓글