1. Dictionary unpacking 활용한 리팩토링
1) 케이스
- country_id가 없으면 전체 리스트를 뿌려주고, country_id가 있으면 해당 국가의 리스트만 뿌려주는 로직임
- 최초에는 이를 if/elif로 분기하여서 처리하였음
- 이를 딕셔너리 언팩킹을 활용해서 코드를 정리함
2) 변경 전
class RegionView(View):
def get(self, request):
country_id = request.GET.get('country_id', None)
try:
if country_id is None:
regions = Region.objects.all()
elif Country.objects.filter(id=country_id).exists():
regions = Region.objects.filter(country_id = country_id)
else:
return JsonResponse({'message' : "INVALID_COUNTRY"}, status=400)
data = [{
'id' : region.id,
'name' : region.name
} for region in regions]
return JsonResponse({'data' : data}, status=200)
except Region.DoesNotExist:
return JsonResponse({'message' : "INVALID_REGION"})
3) 변경 후
class RegionView(View):
def get(self, request):
query = request.GET.get('country_id', None)
filtering_data = {}
if query:
filtering_data['country_id'] = query
regions = Region.objects.filter(**filtering_data)
data = [{
'id' : region.id,
'name' : region.name
} for region in regions]
if len(regions) > 0:
return JsonResponse({'data' : data}, status=200)
else:
return JsonResponse({'message' : "INVALID_COUNTRY"}, status=400)
2. if문을 활용한 삼항 연산자
1) 케이스
- 특정 값이 참일 때는 거짓으로, 거짓일 때는 참으로 바꿔주는 구문을 작성하려고 함
2) 변경 전
if follow.is_follow == False:
follow.is_follow = True
elif follow.is_follow == True:
follow.is_follow = False
3) 변경 후
follow.is_follow = False if follow.is_follow else True
- if 앞에 (값을 담을 변수와 함께) 참일 때 결과가 나옴
- 중간(if ~ else 사이)에는 조건이 나옴
- else 이후에는 거짓일 때 조건이 나옴