[1st Project] Brokurly?! ver 1.0

제갈창민·2021년 12월 13일
0

작업물

목록 보기
5/9
post-thumbnail

1. 메인페이지 정렬기능

"코드나 httpie 줄에 우분투 전용 문법이 섞여 있음을 알립니다."

class ProductView(View):
    def get(self, request):
        try:
            menu_name = request.GET.get('menu', None)
            sort      = request.GET.get('sort', '0')
            sort_dict = {
                'created_at' : 'created_at',
                'price'      : 'price',
                '-price'     : '-price'
            }

            if menu_name == '채소전체':
                menu_name = '채소'
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                results = []
                
            for product_data in products:
                results.append(
                    {
                        'name'         : product_data.name,
                        'introduction' : product_data.introduction,
                        'price'        : product_data.price,
                        'image'        : [image.url for image in product_data.image_set.all()]
                    }
                )
            print(results)
            return JsonResponse({'result':results}, status=201)
  • 메인페이지로 불러온 자료들을 낮은 가격, 높은 가격 순으로 정렬을 하고자, order_by() 코드를 사용했다.
  • 문제는 shell 에서는 잘 작동 했으나, httpie 에서 제대로 작동을 하지 않는 것이다.

    "시도해 본 url과 방법들"
    1) sort_dictkey 값을 0 (따옴표 없이)으로 뒀을 때,
    -> products/category\?category='쌈채소'&sort='0'
    -> products/category\?category='쌈채소'&sort= 0
    = 이번에도 둘다 작동하지 않음. Dictionarykey 값에 int 인 숫자값은 안되는 것처럼 보였음.

    2) sort_dictkey 값을 문자열 대신 '0' 으로 뒀을 때,
    -> products/category\?category='쌈채소'&sort='0'
    -> products/category\?category='쌈채소'&sort= 0
    = 둘다 작동하지 않음.
    == 2시간을 투자하고 나서야 우분투 에서는 Query parameter 의 값 사이에 '\' 를 추가해 줘야 한다는 것을 알았음(ㅇㄱㄹㅇ)

    3) sort_dictkey 값을 '0'으로 두고 '\'를 추가 했을 때,
    -> products/category\?category='쌈채소'\&sort='0'
    = 드디어 성공. 결론은 '\'와 Dictionarykey 값을 정확하게 설정 했어야 했던 것.

    "사용하는 OS에 따라 방법이 다를 수 있다는 기본을 깨닫지 못하고 잘못 쌓아올린 코드탓만 했었다니"

    [기본을 경시한 건물은 짓는 과정도 순탄치 않지만, 짓더라도 완전하지 못하다 ]

2. 메인페이지 버튼별 데이터 출력

  • 내가 맡은 부분의 테이블 관계는 Menu -> Category -> Product -> image 로 이루어져 있다.
  • 화살표의 방향대로 참조 관계가 이어지고, Menu의 id=1(PK) 값을 요청하면 PK를 참조하는 Category의 모든 Product들이 페이지에 나타난다. 가령,
-> Menu :'채소(id=1)'
--> Category :'쌈채소(id=1)',    '유기농채소(id=2)'  [FK:menu_id=1]
---> Product : '깻잎(id=1)',     '상추(id=2)'      [FK:category_id=1], 
               '유기농깻잎(id=1)', '유기농상추(id=2)' [FK:category_id=2]
* 위와 같이 '채소' 버튼을 클릭하면 '채소'PK를 참조하는 모든 데이터의 정보가 출력되야한다.
  • 특정 Menu 나 Category의 데이터를 출력하는 것은 큰 문제없이 구현하였으나, 문제는 '전체보기' 기능.
  • 첫 화면의 default 로 첫 Menu의 모든 데이터를 불러올 수는 있었지만, 다른 카테고리로 넘어갔다가 전체보기를 눌렀을 때, 다시 모든 데이터를 불러와야 했다.
  • 당시엔 할 줄 아는게 if 였기에, 아래와 같은 코드블럭이 탄생했다.
class ProductView(View):
    def get(self, request):
        try:
            menu_name = request.GET.get('menu', None)
            sort      = request.GET.get('sort', '0')
            sort_dict = {
                'created_at' : 'created_at',
                'price'      : 'price',
                '-price'     : '-price'
            }

            if menu_name == '채소전체':
                menu_name = '채소'
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                results = []

            elif menu_name == '샐러드전체':
                menu_name = '샐러드'
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                results = []

            elif menu_name == '과일전체':
                menu_name = '과일'
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                results = []

            elif menu_name == '간편식전체':
                menu_name = '간편식'
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                results = []

            if menu_name:
                menus = Menu.objects.get(name=menu_name)
                categories = Category.objects.filter(menu=menus).all()
                products = Product.objects.filter(category__in=categories).all().order_by(sort_dict[sort])
                # products = Product.objects.filter(category__menu_id=menu_name).all()
                results = []

            for product_data in products:
                results.append(
                    {
                        'name'         : product_data.name,
                        'introduction' : product_data.introduction,
                        'price'        : product_data.price,
                        'image'        : [image.url for image in product_data.image_set.all()]
                    }
                )
            print(results)
            return JsonResponse({'result':results}, status=201)
  • '이거 맞아?' 싶을 정도로 무식한 방법이지만, 또 어쨌든 원하는 대로 데이터를 출력은 했다.
  • 처음엔 for문 도 모든 if문 아래에 중복으로 존재 했었고, 지나가다 코드를 구경온 지식인 동기가 도저히 참을 수 없다며 몇가지를 조언해주었다.(고마워요, 동기맨!)
  • 주석처리를 해둔 부분은 추가로 조언해준 코드인데, 아직은 사용법을 제대로 이해하지 못해서 완성하지 못했고, 추후 참고 목적으로 살려두었다.

3. Review

-> 처음 통신에서 일단 데이터들이 호출은 되었지만, 프론트쪽에서 url에 대한 문제점을 제기하였고, 이후 남은 시간을 메인페이지에 모두 쏟아부었다. 발목을 잡은것은 '전체보기' 탭에 대한 기능 문제였는데, 내가 생각한 방법은 '탭 마다 다른 url을 쓸 수 는 없는가?' 였고 프론트에서 나온 답변은 '가능은 하다, 다만 조금 복잡하다' 였었다. 이번에 팀으로 만났고 메인페이지를 담당했던 팀원이 독보적인 실력자라 가능하다고 말해줬던것 같다(우윳빛깔 마리아!). 아무튼, 나는 '그렇다면 전체보기용 기능을 따로 만들어야겠군' 이라고 생각했고 일일이 url에 다른 값을 넣어 작동하는 코드를 만들어 낸 것이다.
-> (추가) 이틀 후 라이브 코드리뷰를 마치고 난 뒤, 이 생각이 얼마나 어리석었는지 깨닫게 된 것은 안비밀.

profile
자기계발 중인 신입 개발자

2개의 댓글

comment-user-thumbnail
2021년 12월 13일

도저히 참을 수 없댘ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ동기 누구에욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ누군지 알 것 같애

1개의 답글