Django | 오늘의 집 클론 - 포스트 리스트, 디테일 뷰 API (feat. Path variable 과 Query parameter)

김민철·2020년 12월 31일
3

팀프로젝트

목록 보기
3/8
post-thumbnail

Path Variable

/post/23 과 같이 리소스의 특정한 경로를 요청할 때 사용합니다.

Query Parameter

/postlist?order=1 과 같이 경로 뒤에 어떠한 변수에 (여기선 order) 값을 함께 요청할 때 사용합니다.

디테일 뷰 API (Path variable)

urls.py 는 장고로 작성된 사이트의 목차와 같은 역할을 해줍니다. 장고는 각 URL 패턴을 순서대로 실행하고 요청한 URL 과 일치하는 URL 을 찾고 실행시킵니다.

제가 community 앱에 작성한 urls.py 입니다.


/post/1 ... /post/56 등과 같은 URL 뒤의 숫자는 입력된 포스트 번호(post_id) 를 나타냅니다. 1번부터 포스트가 등록된 시간 순서에 따라 숫자를 부여했습니다.

post_id 를 포함한 GET 메서드가 서버에 전달되면, 그 포스트 id 에 맞는 유저, 카테고리, 이미지 들을 딕셔너리에 담아 클라이언트에 전달해줍니다.

디테일뷰 로직을 짜면서 프론트에서 원하는 데이터를 주지 못해 괴로웠습니다.

위 사진의 오른쪽을 보면 포스트를 작성한 유저의 이전 포스트 사진이 보입니다. 그리고 사진을 클릭하면 해당 포스트로 이동되게 됩니다. 그렇기 때문에 저는 이전 포스트 정보들을 같이 보내주고 싶었습니다.


포스트에 들어가는 이미지들이 포스트를 참조하고, 포스트가 유저를 참조하는 구조로 모델링을 하였습니다. 그렇기에 역참조에 역참조인 상황에서 어떤식으로 데이터를 가져와야 할지 여러 생각과 시도를 해봤지만 구현에 실패했습니다.
이 부분은 2차 프로젝트가 끝나면 꼭 구현해 보고 싶습니다.

참고

https://docs.djangoproject.com/en/3.1/topics/http/urls/

포스트 리스트 API (Query parameter)


사진의 좌측 상단을 부면 정렬과 필터링이 보입니다. 여기서 정렬은 '최신순' 과 '오래된 순' 으로 나누었습니다. 그리고 필터링 부분에서는 주거형태, 평수, 스타일의 큰 카테고리 안에 세부 카테고리를 선택할 수 있게 하여 필터링을 나누었습니다.

필터링과 포스트들을 뿌려주기 위한 코드입니다.

request.Get.get() 은 query parameter 로 요청받은 URL 에서 변수와 그 값을 가져옵니다. 이렇게 가져온 값들을 따로 변수를 지정해줬습니다.

프론트 개발자분에게 정렬, 주거형태, 평수, 스타일데이터를 숫자로 전달해달라 요청했습니다.

order 를 보면 정렬이 선택이 안되거나 '최신 순' 을 클릭하게 되면 1이 서버로 전달되고, '오래된 순' 이 클릭되면 2가 서버로 전달되게 했습니다.
비슷하게 주거형태, 평수, 스타일 3개의 필터링 데이터들도 각각의 세부 카테고리를 숫자로 전달받았습니다. 전달받은 데이터와 테이블의 id 값을 비교해 같은 값을 필터링해주었고 중복 적용도 가능하게 했습니다.

이렇게 정렬되고 필터링 된 포스트들의 데이터들만 다시 클라이언트에 전달해줬습니다.

이 과정에서 같은 팀 수한님께 'prefetch_related' 를 배워 처음 사용했습니다.

'prefetch_related' 쿼리셋은 주로 역참조 관계일 때, 사용합니다. 역참조일때, prefetch_related의 사용방식은 역참조하는 class 를 소문자로 적어주고 _set 을 붙혀 사용하게 됩니다. 이렇게 prefetch_related를 사용하면 정참조 관계에서 쓰던 쿼리문처럼 사용할 수 있습니다.

테스트하는 과정에서 httpie를 사용했는데, httpie 를 사용할 때는 실제 URL 주소와 조금 달랐습니다.

만약 localhost:8000/community/postlist?order=1&residence=3 인 URL 이 있다면

? 대신 공백을 사용해야 하고 '=' 또한 두 번 붙혀줘야합니다.

http -v GET localhost:8000/community/postlist order==1&residence==3

두 API 를 작성하면서 path variable 과 query parameter 에 대해서 알게 된 부분을 정리해보겠습니다.

Path variable 는 포스트들과 같은 여러 리소스를 식별해야하는 상황에 많이 쓰입니다.

Query parameter 는 여러 데이터들의 정렬이나 필터링, 검색과 같은 상황에서 많이 쓰이게 됩니다.

간단히 보면 하나의 정보가 필요할 땐, Path variable

여러 정보가 필요할 땐, Query parameter 를 사용하면 됩니다.

0개의 댓글