본문 바로가기

web/Django_rest_framework

(21)
JWT에서 Django request.user 까지의 여정 Django에서 request의 유저를 알기 위해선 request.user를 통해 알 수 있다. Django에서 지원하는 session 방식의 로그인 / rest_framework에서 지원하는 JWT 등 로그인을 하면 request.user의 정보를 가져올 수 있다. 이번 글은 request.user에 정보가 들어가기까지 어떤 동작을 하는지 살펴보는 글입니다. django == 2.1.2 // djangorestframework == 3.9.0 에서 진행하였습니다. 해당 버전에 따라 소스 코드가 달라질 수 있습니다. 1 번은 일반 로그인 방식이며, 2번은 JWT 방식이다. 1번 일반 로그인 방식은 먼저 cookie에 있는 세션값을 request.session에 저장하고 session 값을 통해 유저 정보..
[Django rest framework] 번외. swagger 적용하기 API 문서는 프로젝트를 수행하는 규모와 방식에 따라 각기 다른 목적으로 다양한 문서를 작성하게 됩니다. 수많은 프로젝트에서 그렇듯 이런 문서는 조금만 방심하면 유지보수되지 않는 문서가 되곤 합니다. 여러가지 이유로 유지보수되지 않는 문서로 인해 발생하는 유산(legacy)은 가끔(거의 항상) 프로젝트에 악영향을 주곤 합니다. 그중에 API 문서에 대해 공유해보려 합니다. 앞서 만든 API들을 다른 개발자분들과 함께 사용하기 위해선 문서가 필요합니다. 자동으로 문서화를 해줄 package는 drf-yasg를 사용합니다. drf-yasg 패키지 설치 $ pip3 install drf-yasg settings.py 설정 #settings.py INSTALLED_APPS = [ ...... "drf_yasg"..
[Django rest framework] 5. test 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8, 을 사용합니다. 코드 테스트는 아주 중요합니다. 테스트 코드를 능숙하게 작성하고 사용하면 코드의 의도를 보다 명확히하는데 좋을 뿐 아니라, 아키텍처의 결합도를 낮출 수 있습니다. 테스트의 일반 원칙 테스트 유닛은 각 기능의 가장 작은 단위에 집중한다. 해당 기능이 정확히 동작하는지를 증명한다. 각 테스트 유닛은 반드시 독립적이어야 한다. (다른 테스트에 영향을 끼쳐선 안된다.) 위의 원칙을 지키며, 자신의 코드를 테스트 할수 있는 테스트 코드를 만든다면, 배포 및 유지보수에 큰 도움이 됩니다. 그러면 이제부터 기본적인 테스트코드와 테스트코드에서 사용하는 mock, patch..
[Django rest framework] 4. filters 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8을 사용합니다. django에서의 filter는 보통 query_set()을 통한, 즉 쿼리를 통해 조건을 추가 하여 데이터를 반환하는 경우가 많습니다. 이를 더욱 재사용가능하게 만든 패키지가 django-filter입니다. 이를 활용하면 간단하게 filter / order by를 추가할 수 있습니다. Using django-filter 먼저 해당 패키지를 설치 합니다. pip3 install django-filter settings.py의 rest_framework 의 옵션에 filter사용을 선언합니다. # settings.py REST_FRAMEWORK = { ........
[Django rest framework] 3. pagination 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8 을 사용합니다. Django는 paginated 즉 “이전/다음”링크를 사용하여 여러 페이지로 나누어진 데이터를 관리하는데 도움이 되는 몇 가지 클래스를 제공합니다. (Paginator 클래스) 또한 DRF에서도 이러한 pagination 기능을 제공하고 있습니다. PageNumberPagination / LimitOffsetPagination pagination 설정에는 두 가지 방법이 있습니다. PageNumberPagination page : 몇 번째 페이지인지 표시해줍니다. 페이지는 1부터 시작합니다. page_size : 한 페이지에 몇 개의 레코드를 보여줄지 표시해..
[Django rest framework] 2. token / authentication 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8 을 사용합니다. rest fremework는 기본적으로 템플릿 방식이 아닌, api 호출을 기반을 위주로 합니다. 또한 같은 도메인 호출도 있겠지만, 다른 도메인에서 호출하는 경우도 있습니다. 이때 해당 회원(권한)인지를 인식해야 되는 과정이 필요한데, 이를 위해 헤더에 해당 회원의 token을 포함하여 전송함으로써 서버에서는 해당 token값으로 회원을 인식합니다. 이번 포스팅에서는 DRF token 설정과 각 api에서의 auth 설정에 관한 내용이며, API 서버에 자주 사용되는 JWT(Json Web Token) 인증을 장고(django)를 사용하여 구현하려고 합니다 ..
[Django rest framework] 1. 기존 셋팅 + CRUD 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8 을 사용합니다. 이번 포스팅에서는 기본 셋팅 및 간단한 모델을 생성하여, CRUD URL을 만드는것을 목표로 합니다. 1. 프로젝트 생성 및 DRF 기본 셋팅 패키지 설정을 위해 virtualenv로 관리 합니다. python 3.6 버전으로 django-env이라는 env를 생성합니다. $ sudo pip install virtualenv $ virtualenv -p python3.6 django-env $ source django-env/bin/activate env생성 및 활성화 함으로써, 전역 설치가 아닌 django-env에 패키지들이 설치되게 되어 패키지들의 버전 ..
[Django rest framework] 튜토리얼을 시작하며. 기존에 작성했던 Django rest framework의 포스팅이 너무 낮은 버전에서 구현한거라 문제가 심각하게 있었다. (물론 4년전에 한거니까 당연한 거다.) 그리고 Django REST Framework (DRF) 3.0의 tutorial만 읽고 그 동안 개발을 했었는데, DRF에서 제공하는 기능은 커녕, tutorial의 기능조차 제대로 사용하지 않고, 하나하나 모든 기능을 만들면서 시간을 낭비하고, 보기 싫은 코드를 작성하고 있었다. 그래서 이전에 작성한 포스팅은 모두 삭제 하고, 다시 글을 써 보기로 했다. 앞으로 연재할 포스팅에서는 1. 최대한 DRF의 최신 기능 및 서드 파티들을 사용하는것을 목표 2. view의 모든 기능은 viewset.modelView 를 기반하여 상속이나 재사용이 가..