기획 의도, 화면, 코드, 테스트 코드, 어려웠던 점, 해결방법, 느낀점 등을 설명한다.
1. 카테고리
- 기획 의도
- 요기요 카테고리랑 비스무리하게 만드는 것이 목표
- 화면
- 코드
config 디렉토리의 urls.py에 path('home/', home, name='home'),가 있다. 이 경로로 접속하면 홈 화면이 켜지고 path('api/category/', include('category.api.urls')), 이 경로가 호출된다. 카테고리 api 디렉토리에는 역시 urls.py가 있고 이 안에는 위 경로가 호출될 때 호출되는 클래스 뷰가 있다. 클래스 기반 뷰를 함수로 호출한다. views.CategoryListAPIView.as_view(), 이렇게.
class CategoryListAPIView(View):
def get(self, request, *args, **kwargs):
category_list = Category.objects.all().values('pk', 'name', 'img')
if request.user.is_authenticated:
json_data = {
'category_list': list(category_list),
'user_addr': request.user.address,
}
else:
json_data = {
'category_list': list(category_list),
}
return HttpResponse(
json.dumps(json_data),
content_type='application/json'
)
카테고리 리스트를 읽는 부분이므로 get함수를 사용한다. 홈 화면에는 모든 카테고리를 보여줘야 하기 때문에 ORM에서 all() 함수를 사용한다. 그리고 필요한 필드인 pk, name, img를 선택한다. 응답값은 json 직렬화를 해서 이 api를 호출한 ajax로 보낸다.
- 테스트 코드
class CategoryTestClass(TestCase):
def test_home_page_should_be_opened_on_request(self):
# Given
url = reverse("home")
# When
response = self.client.get(url)
# Then
self.assertEqual(response.status_code, HTTPStatus.OK)
def test_category_should_be_shown_on_request(self):
# Given
url = reverse("category_api:category_list_api")
# When
response = self.client.get(url)
# Then
self.assertEqual(response.status_code, HTTPStatus.OK)
단순히 홈화면과 요청한 카테고리 리스트 api가 응답 성공인지 확인하는 테스트다.
- 어려웠던 점
- 저 테스트 코드 짜는 것도 힘들었다.. 뭐가 뭔지 몰랐어서..
- ORM 작성과 직렬화에 대한 개념이 없었다.
- 해결 방법
- 다른 분이 짠거 참고했고, 뭘 테스트해야 하는 지 명확히 했다. 결국 홈 화면이 잘 나오는가? 그리고 api 호출이 성공했는가?에 대해서 테스트했다.
- 맥북에서 주피터 노트북 켜놓고 계속 ORM 연습했다. 자료구조가 Queryset인 것을 list()로 list화하고 json.dumps로 문자화된 json 객체를 만들거나 JSONResponse()을 써서 처리했다.
- 느낀점
- 아주 초기에 짠 코드라 단순하다.
- 반복하는 게 중요하다.
'인턴 프로젝트' 카테고리의 다른 글
미니 요기요 프로젝트(5) - 레스토랑 구독하기, 구독 중인 레스토랑 (0) | 2019.07.24 |
---|---|
미니 요기요 프로젝트(4) - 날씨별 잘 팔린 메뉴 (0) | 2019.07.24 |
미니 요기요 프로젝트(3) - 메뉴, 메뉴 디테일 (0) | 2019.07.23 |
미니 요기요 프로젝트(2) - 레스토랑, 레스토랑 디테일 (0) | 2019.07.23 |
미니 요기요 프로젝트(0) - 개요 (0) | 2019.07.23 |