Project2 : Wanted 클론 Refactoring

Joey Lee·2020년 6월 16일
0

Django

목록 보기
20/23

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 이후에는 거짓일 때 조건이 나옴
profile
안녕하세요!

0개의 댓글