본문 바로가기
프로그래밍/Django

[Django]filter_fields로 URL 파라미터 사용하기

by 우주를놀라게하자 2022. 5. 13.
반응형
SMALL

시작


CRUD에서 GET을 통한 작업은 매우 필수적이다. 

Django는 원하는 정보만을 필터링해서 데이터를 읽어올 수 있는 Filter_Fields를 제공한다.

[Request URL]
http://127.0.0.1:8000/users?email=test@admin.co&username=test

위와 같이 API를 통해서 요청을 보낼때, 파라미터에 값을 정해주고 내가 원하는 값을 얻고자 할때 주로 사용이 된다.

조금 더 시각화를 돕기 위해서 swagger의 기능을 사용하여, 이해하려고 한다.

swagger


모델을 따로 만들어서 하기는 귀찮았기 때문에,,, 기본적으로 제공되는 Django의 User 모델을 사용하여 연습해보자!😀

위의 캡쳐는 Swagger를 통해서 나의 API가 어떻게 구성되어 있는지 확인할 수 있는 툴이다.

일단 기본적으로 GET: /user, /user/{id}가 있는데 우리는 여기서 /user URL을 통해서 Filter_Fields의 존재 유무에 따라서 어떤 변화가 생기는지 파악하려고 한다.

기본적으로 Filter_Fields가 없다면 위와 같이 /users 다음에 처음에 설명하였던, ?email=test@admin.co&username=test 와 같은 파라미터를 넘겨줄 수 없다.

가끔 GET으로 데이터를 가져올 때, 특정 조건을 가진 데이터만을 가지고 오기 위해서 Filter_Filelds를 설정해줘서, URL 뒤에 파라미터를 던져서 필터링 하는것이 목적이다.

코드상에서 Filter_Filelds를 설정하여, 파라미터를 URL에 제공하도록 하자. 코드상에 추가하면 아래와 같다.

필터필드를 추가하여 위와 같이 email과 username을 파라미터로 받을 수 있게 되었다.🙏🙏🙏🙏🙏

request를 하는 URL을 확인해보면 의도대로 파라미터도 잘들어가고, 결과값도 자아아알~~나온다.

 

코드 구현


Swagger는 이해를 돕고자 사용한 것이기 때문에, 따로 설명하지 않겠다.

이제 코드로 구현해보자

필터 필드를 사용하기 위해선 라이브러리부터 설치해주자!

$ pip install django-filter

설치 완료 후 settings.py에 들어가서 REST_FRAMEWORK를 설정해준다.

REST_FRAMEWORK는 DRF 세팅을 위한 설정이라고 생각하면 될 것 같다. 

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}

이제 설정은 완료 되었고, 코딩 한줄만 추가해주면 된다.

view.py로 들어가서, 코드 한줄만 추가해주자. 아래와 같이 filter_fields에 serializer를 통해서 받아오는 데이터 중 파라미터로 선정하고 싶은 컬럼들을 적어주면 된다.

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    filter_fields = ('email', 'username',)

 

느낀점


DRF는 편리하긴 하지만, 구문들이 생략된게 굉장히 많은것 같다.. DRF가 아니라 Django가 더 맞는 표현이겠다.

물론 생략이 많아서 구현은 굉장히 편하긴 한데, 코드상에서 동작하는 원리를 생각할 때는 꽤나 난이도가 높은거같다...

Django쪽 라이브러리와 DRF쪽 라이브러리는 아직 익숙하지 않아서 열심히 공부해야겠다😁😁😁😁😁😁

반응형
LIST