TIL_231106_장고로 검색기능

Sol Lee·2023년 11월 6일
0

최종프로젝트 시작함.

이번 프로젝트에서 백엔드쪽을 담당하게 되었다.
프로젝트 주제는 냉장고 재료 기반 레시피 검색/공유 서비스.

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()

유효성 검사를 어떻게할지도 고려해보고 실제 작업할 때는 변수명같은거나 주석을 더 보기 좋게 써야겠음.

profile
직업: 개발자가 되고 싶은 오레오 집사

0개의 댓글