일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 예술영화추천
- 장고 프로젝트
- 북마크만들기
- 알고리즘
- Blog
- Django
- ART_Cinema
- mongodb
- Django Blog
- 장고
- MyPick31
- 개발
- python
- 자바스크립트
- Bookmark
- 타사인증
- 파이썬 웹프로그래밍 장고
- 북마크앱
- 프로젝트
- 장고 프로젝트 순서
- MYSQL
- JavaScript
- Node.js
- passport.js
- til
- Exercism
- Algorithm
- 장고 개발 순서
- join()
- 독립영화플랫폼
- Today
- Total
Juni_Dev_log
20.11.28 (MyPick-31) TIL 본문
(문제1) 베이스, 토핑, 시럽을 모두 체크해서 필터링을 하면 정상적으로 아이스크림을 가져오지만, 셋 중에서 하나라도 고르지않으면 오류 발생.
지난번 프로젝트 개발 중 마지막으로 발생됐던 오류이다.
DB에 있는 데이터 중에서 base / topping / syrup 중에서 한 개라도 없는 아이스크림의 경우, 필터링을 할 때 오류가 발생한다.
예를 들어서 "사랑에 빠진 딸기" 라는 플레이버를 살펴보도록한다.
/* 16 */
{
"_id" : ObjectId("5f918a30d9241646728d4ab9"),
"id" : "16",
"name" : "사랑에 빠진 딸기",
"name_eng" : "love struck strawberry",
"base" : "딸기, 치즈",
"topping" : "딸기, 크런치 초콜릿, 치즈케이크",
"syrup" : "",
"kcal" : "292",
"allergens" : "우유,밀,대두,계란,땅콩",
"img" : ""
}
base : 딸기, 치즈
topping : 딸기, 크런치 초콜릿, 치즈케이크
syrup : 없음
시럽이 없는 아이스크림을 조회하려면 결국, 체크박스에서 시럽을 클릭하지 말아야한다.
temp_flavor 라는 변수가 사용자가 고른 base, topping, syrup 을 담은 배열인데,
이 배열의 길이를 활용하려는 방법은 지금의 상태로는 사용할 수 없다.
원래 temp_flavor 라는 변수의 값은 보통 이런 식으로 나온다.
['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']
[0] : base1
[1] : base2 ( base1 의 하위 요소)
[2] : topping1
[3] : topping2 (topping1의 하위 요소)
[4] : syrup1
[5] : syrup2 (syrup1의 하위 요소)
여기서 만약 base를 체크하지 않은 경우가 되면
['', '', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']
아무 값도 들어가지 않는 문자열이 들어간다. 이러한 경우에는 문제가 없는 것을 확인할 수 있다.
만약, topping을 체크하지 않은 경우라면,
['바닐라', '무설탕 바닐라', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']
아무 값도 들어가지 않는 문자열이 들어가야하지만, 아무런 값도 들어가지 않은 것을 확인할 수 있다.
syrup을 체크하지 않은 경우에는,
['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피']
빈 값이 들어가지 않아서 계속해서 오류가 발생한다.
File "C:\Users\kks13\OneDrive\바탕 화면\Dev\MyPick31\MyPick-31\app\run.py", line 540, in bring_season_ice_cream temp7 = temp_flavor[4].split(',') IndexError: list index out of range
temp_flavor[4] 가 존재하지 않기 때문에 발생하는 오류이다.
그래서, topping과 syrup이 체크되지않았을 때도 빈 값의 문자열이 들어가도록 코딩을 해야한다.
자바스크립트의 코드 부분에서 빈 체크박스일 경우에는 ["",""] 형태의 값을 가지도록 코딩을 했다.
// topping data가 없는 경우
if(data.length == 0) {
Topping_data = ["",""]
return Topping_data;
}
...
// Syrup data가 없는 경우
if(data.length == 0){
Syrup_data = ["",""]
return Syrup_data;
}
이를 통해서 체크되지 않은 경우에는 빈 값이 들어가도록 설정했다.
(syrup을 체크하지 않은 경우)
['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '', '']
이를 통해서 해당 문제는 해결했다.
(문제2) 필터링 결과. 중복된 아이스크림이 결과로 나오기 시작했다.
base = 바닐라 / topping = 캔디 를 고른 경우, "팝핑 슈렉" 이라는 아이스크림이 결과로 나왔다.
그런데, 똑같은 팝핑 슈렉이 두 개가 나오는 경우가 발생했다.
왜 같은 아이스크림이 두 개가 나온 것일까?
코드를 읽어보니, 만약 빈 배열의 값이 들어갔을 때, 필터링을 위한 if for 구문들이 제대로 걸러지지 않는다는 것을 확인할 수 있었다.
# 테스트 코드 (베이스와 토핑 그리고 시럽을 확인하는 for , if 구문)
for j in temp_base:
print(j)
for k in temp:
print(k)
# base 검사하는 if 구문
if j == k:
print('베이스가 같습니다.')
for l in temp_topping:
print(l)
for p in temp3:
print(p)
# topping 검사하는 if 구문
if l == p:
print('토핑이 같습니다.')
for b in temp_syrup:
print(temp_syrup)
print(b)
for s in temp6:
print(temp6)
print(s)
if b == s:
print('시럽이 같습니다.')
print(season_db)
bring_filter_season_db.append(season_db)
else:
print('시럽이 다릅니다.')
else:
print('토핑이 다릅니다.')
else:
print('베이스가 다릅니다.')
이 코드에서 중복으로 필터링을 검사해서 똑같은 두 개의 아이스크림이 들어가게된 것이다.
마지막 과정에서 중복되는 값을 제거해주는 코드를 추가하면 마무리 될 것으로 예상한다.
'Project > MyPick-31(Dev)' 카테고리의 다른 글
MyPick-31 정리 (0) | 2021.02.01 |
---|---|
20.11.22 (MyPick-31) TIL (0) | 2020.11.23 |
20.11.21 (MyPick-31) TIL (0) | 2020.11.22 |
20.11.15 (MyPick-31) TIL (0) | 2020.11.15 |
20.11.14 (MyPick-31) TIL (0) | 2020.11.15 |