django-rest-framework…. :'( 모델시리얼라이저 user모델에 사용

 
Han Cold Kim

django-rest-framework…. 😥

모델시리얼라이저 user모델에 사용하려고 안되는 실력으로 물어가며 찾아가며 열심히 짰는데…

페이지네이션 적용하니까 바로 물거품 되네요 ㅠㅠ

과거에 이런 노력을 했었죠…(https://www.facebook.com/groups/django/permalink/609123722457464/)

크게봐서 password2문제와 serializer.data시 password의 값이 보인다는것…

여기서 발생한 문제는 password2는 없는데

serializer.data시 password의 값이 보인다는것…이 다시 발생했네요…

저는 modelviewset(http://django-rest-framework.org/api-guide/viewsets#modelviewset)를 사용하고있고..

pagination은 이 문서를 참고(http://django-rest-framework.org/api-guide/pagination#pagination-in-the-generic-views)하여

views.py의 UserViewSet에 paginate_by = 10만 적용했습니다…

그래서 10개씩 잘 paging되어 응답하긴 하는데…

문제는 pagination_serializer가…

settings.py에 따로 설정하지 않는다면

https://github.com/tomchristie/django-rest-framework/blob/6908c183a4331494c60c4aa025003a544bb4d15c/rest_framework/settings.py#L57-L58

위 코드에 의해서 django-rest-framework의 기본 PaginationSerializer를 이용한다는 겁니다…

PaginationSerializer는 rest_framework.serializers.Serializer(https://github.com/tomchristie/django-rest-framework/blob/0eec692f9a884a1b303910e2595eefcd5215dfff/rest_framework/serializers.py#L537-L538)를 상속받은 class이고요…

그래서 다시 문제로 돌아가면 serializer.data시 password가 출력되서, 그걸 피하기위해 이런식(https://gist.github.com/meoooh/7921669#file-serializers-py-L24-L36)으로 해결을 했습니다.

data를 return하기전에 ‘password’가 존재한다면 del _data[‘password’] 해주는 방식으로요…

그런데 rest_framework.serializers.Serializer의 data 함수에는 이러한게 구현되어있지 않아서 password가 그대로 출력되고있네요…

그래도… 방법이 있겠지… 찾아보니까

커스텀 페이지네이션 시리얼라이저를 구현하는 방법(http://django-rest-framework.org/api-guide/pagination#custom-pagination-serializers)이 소개되어있어서 봤더니…

‘To create a custom pagination serializer class you should override pagination.BasePaginationSerializer’ 이렇게 되어있네요… BasePaginationSerializer를 꼭 override해야한다고… 근데 django-rest-framework의 기본 PaginationSerializer가 바로 저 BasePaginationSerializer를 상속받고있거든요… 결국 시리얼라이저는 rest_framework.serializers.Serializer를 이용해야한다는 건데…

어찌해야할지 모르겠네요… 페이지네이션은 제가 따로 구현해야할까요??

  • Han Cold Kim

    어휴 기네요… 페이스북이 링크만 지원해줬으면 그래도 좀 깔끔해보일텐데….

Advertisements