최종프로젝트 시작함.
이번 프로젝트에서 백엔드쪽을 담당하게 되었다.
프로젝트 주제는 냉장고 재료 기반 레시피 검색/공유 서비스.
DRF를 활용하여 백엔드쪽에서 검색기능을 추가해보려고 함.
아직 레시피 등록/수정/삭제 기본 기능이 작업중이라 오늘은 어떤 방식으로 검색기능을 구현할 지 구상하고 방법을 검색해봄.
프론트엔드쪽과 상의한 결과 파라미터로 검색할 내용을 받을 것 같다.
재료를 여러개 받으면 여러개의 재료가 모두 포함된 레시피를 보내줘야 함.
이런 느낌으로 요청을 받지 않을까 싶다.
# 예상 요청?
/articles/recipe/search?q=삼겹살,양파,김치/
검색 조건 자체는 하나일 예정이고 하나 안에 복수의 값이 들어갈 것 같다.
페이지네이션도 백에서 해보자는 얘기도 회의때 나왔었는데 MVP가 아니라서 후순위로 밀려났다. 근데 검색하다보니 검색과 페이지네이션을 같이 설명해 놓은 포스팅들이 많이 보여서 시간 여유가 되면... 해볼까 생각중.
# 예상 요청?
/articles/recipe/search?q=삼겹살,양파,김치&page=11~20/
일단 url에서 파라미터를 가져오고 그걸로 필터를 걸면 될 것 같음
근데 포스팅마다 파라미터를 가져오는 방식이 다름. 차이가 있나?
# 예상 코드?
# urls.py
urlpatterns = [
...
path('search', views.RecipeSearchView.as_view()),
...
]
# view.py
class RecipeSearchView(APIView):
def get(self, request):
# 방식1: kwargs로 url을 통해 넘어온 검색어 받음
q = self.kwargs('q')
# 방식 2: 키값으로 쿼리스트링의 value 추출
q2 = request.GET.['q']
...
# q = "삼겹살,양파,김치"
# 검색어 특정 문자 기준으로 split
# q = ["삼겹살","양파","김치"]
q = q.split(",")
...
# ingredients필드에 검색어가 포함된 레시피들 추출
# 검색된 재료가 여러 개면 전부 포함된 레시피를 찾아야 함
recipe_list = Recipe.object.filter(ingredients__in=q))
...
...
return Response()
유효성 검사를 어떻게할지도 고려해보고 실제 작업할 때는 변수명같은거나 주석을 더 보기 좋게 써야겠음.