-
TIL.74 삼항 연산자TIL/Python 2020. 12. 21. 22:24728x90
프로젝트 진행 간 if문으로 가지치는 방법이 싫어 찾아봤던 삼항 연사자를 간략히 정리해보자
1. 삼항 연산자(Ternary operators)
# 참인경우 값 if 조건 else 거짓인경우 값
- 연산 대상의 개수에 따라 연산자를 분리하면 단항 연산자, 이항 연산자, 삼항 연산자로 분리 합니다.
- 단항 연산자는 부호(+, -), not 등이 있으며 +, -, *, / .... 등 대부분의 연산자가 이항 연산자 입니다.
- 삼항 연산자는 1개가 존재 합니다.
아래와 같이 QueryString 요청에 "P"가 포함될 경우에 따라
앞의 식을 실행하지 뒤의 식을 실행할지 정하는 식으로 사용할 수 있다.
# A = apple / B = banana a_name = request.GET.get('P', None) product = Product.object.get(name=a_name)if a_name=='A' else Product.objects.get(name=b_name)
아래와 같은 QueryString 요청으로 각기 다른 식을 적용해 각기 다른제품을 볼 수 있다
10.xxxxxxxx:8000/product?P=A # apple 10.xxxxxxxx:8000/product?P=B # banana
삼항연산자를 알아보면서 이를 왜 알아봤는지 자세한 이유를 복기해보자.
(아래와 같은 이유로 삼항 연산자를 검색하고 학습하게 되었지만 결론적으로는 이를 적용하지 않는 로직을 구현하였다.)
이유는 이미 ProductlistView에 최신/가격/인기도/리뷰많은순/평점높은순 등을 모두 RESTfulAPI로 구현해놓은 상태에서
코드가 깔끔해지지 않아 보이나는 생각에 DetailView에서 패스파라미터와 검색기능을 함께 구현하려고 하였다.
아래와 같이 DetailView에 작성해도 검색기능을 구현할 수 는 있지만 크게 2가지 문제가 있다고 생각한다.
1. Django convention에 어긋난다.
2. Request의 불필요한 요청이 강제적으로 포함된다.
(아래와 같이 검색기능을 사용할때도 <int>를 꼭 붙혀줘야하는 번거로움이 있다.)
10.xxxxxxxx:8000/product/1 # path parameter 10.xxxxxxxx:8000/product/1?search=price # search 기능 10.xxxxxxxx:8000/product/?search=price # search 불가능 10.xxxxxxxx:8000/product?search=price # search 불가능
class ProductDetailView(View): def get(self, request, product_id): try: product = Product.objects.get(id=product_id) product_detail = { 'id' : product.id, 'product_category': product.category.name, 'product_menu' : product.category.menu.name, 'product_name' : product.name, 'price' : product.price, 'created_time' : product.created_at, 'image' : product.image_set.get().image_url, 'discount' : product.discount.rate, 'stock' : product.is_in_stock, } return JsonResponse({'product' :product_detail}, status=200) except Product.DoesNotExist: return JsonResponse({'MESSAGE' : 'NO_PRODUCT'}, status=409)
결과적으로 삼항연산자를 적용하지 않았지만 굉장히 유용한 python 개념을 알게된 계기가 되었다.
그리고 검색 기능은 상품 리스트 뷰에 포함시키는것이 컨밴션이라는 것을 잊지말자!
728x90'TIL > Python' 카테고리의 다른 글
TIL.88 Decorator(토큰 인가)_Unit Test (0) 2021.01.04 TIL.63 try_except 구문의 중요성 (0) 2020.12.10 TIL.55 Python 정규표현식 사용하기 (0) 2020.12.03 TIL. 53 CSV 파일 데이터로 집어넣기 (Django, MySQL) (0) 2020.12.01 TIL.52 Bs4와 selenium 을 이용한 크롤링 (0) 2020.11.30