본문 바로가기

DRF Custom Permission DRF Custom Permission Django에서 특정 그룹에 속해있는 유저만 실행할 수 있는 viewset을 만들어봅시다 !! 일단 "NGEE" 라는 그룹이 생성되어 있다고 가정할 때 아래와 같은 permission 클래스를 하나 만들어줍니다. ngeePermission의 has_permission이 하는 일은 request.user.groups 이름을 가지고 와서 거기에 NGEE가 있는지 없는지를 리턴해줍니다. NGEE 라는 그룹에 속해있다면 True가 리턴될 것이고 반대로 속해있지 않다면 False가 리턴되겠죠? from rest_framework.permission import BasePermission class ngeePermission(BasePermission) def has_perm.. 더보기
DRF - list_route, detail_route >> @action 변경 DRF (Django Resf Framework)에서 list_route와 detail_route는 각각 아래와 같이 변경해야 합니다. from rest_framework.decorators import action @action(detail=False) #list_route @action(detail=True, methods=['post']) #detail_route 이제 list_route, detail_route가 action으로 합쳐졌기 때문인데요. 아래 홈페이지 내용을 참고하세요. https://www.django-rest-framework.org/community/3.8-announcement/#action-decorator-replaces-list_route-and-detail_route a.. 더보기
Django Rest Framework : 3.3.3 to 3.5.x Django를 1.9.x 에서 1.10.x로 올리면 Django Rest Framework 도 올려줘야 합니다. 저는 아마도 3.3.3 에서 3.5.x 로 올렸는데요. 몇 가지 에러가 있었던 것 같지만 가장 기억에 남는 부분은 Serializer에 fileds 값을 잘 지정해야 한다는 것입니다. 3.3.3 에서는 fields 값을 지정하지 않으면 자동으로 모든 값에 대해서 serializer가 작동했다면 3.5.x에서는 모두 사용할 것이라면 __all__으로 지정해야하고 그렇지 않다면 특정 field를 지정해줘야 합니다. 그러니깐 소스코드를 보시죠. 3.3.3에서도 특정 field를 사용했던 코드는 문제 없이 작동하겠죠. 다만 모든 field를 사용하기 위해서 비워두고 지나갔던 코드들은 3.5.x에서 에.. 더보기
Django Rest Framework Performance Django Rest Framework Performance 관련해서 많은 도움을 받은 웹 문서를 하나 추천합니다. Web API performance: profiling Django REST framework https://www.dabapps.com/blog/api-performance-profiling-django-rest-framework/ 저도 최적화 할 때 위 내용을 많이 사용했어요. 기본적인 내용인데 이런 것들을 잘 기억해서 다음번 설계에도 반영해야겠어요. 1. Serializer를 통과시키지 말고 필요한 데이터만 values로 뽑아올 것 2. 캐시를 잘 사용하자 3. view를 슬림하게 유지하고 HttpResponse 사용하자 캐시는 꼭 해야 하는 것 같아요. :-) 위 내용을 적용하면서 .. 더보기
Django + Rest Framework + JWT Django + Rest Framework + JWT 에 대해서 간단하게 작동을 실험해봤습니다. 여기는 간단하게 사진으로 정리해두려고 합니다. settings.py 에는 아래와 같이 추가합니다. 'rest_framework', 'rest_framework.authtoken', 'jwtTest', #저는 test app으로 jwtTest라는 앱을 생성했어요. 아래 그림도 settings.py 에 추가하는 부분입니다.구현하려는 시스템에서 원하는 Auth. Class를 추가해주시면 됩니다. 아래는 urls.py입니다. 요 아래는 jwtTest 앱의 views.py입니다. token을 get하는 것과 endpoint를 call하는 방법에 대해서만 잘 보시면 됩니다.Auth. Class를 JSONWebToeknA.. 더보기
Django Rest Sample App 많은 블로그나 웹 문서에서 다루고 있는 내용이라서저는 참고용 소스와 스샷으로 대신합니다 :) 간단하게 물건에 대해 저장 / 관리할 수 있는 앱이라고 생각하시면 되겠습니다.물론물론 당연히 실제로 이렇게 물건들이 관리되진 않겠죠 !! Django + REST 방식이 어떤 소스로 작동되는가 정도를 공유하는게 목표입니다. 1. 구현된 소스를 작동시키고 localhost:8000/product_a/management 로 접근하면 아래와 같은 화면이 나옵니다. Django REST Framework에서 기본적으로 제공하는 화면인데요.실제 get / post 명령어가 여기에서 가능하도록 UI가 구성되어 있습니다. 접속하면 get이 실행되어서 화면에 출력되고요. 하단에 있는 form을 통해서 post 메소드를 실행할 .. 더보기
django rest : url in serializer django rest framework에서 serializer에 url field에 대해서 간단하게 기록해둡니다. django rest framework에서는 구현한 API를 테스트하거나 활용할 수 있는 웹 용 UI를 기본적으로 제공하자나요. 아래 그림과 같이 말이죠. 위 그림은 get 으로 모든 목록을 받아온 예시입니다. 그림에도 표시한 것 처럼 url 이라는 필드가 있고 그걸 클릭하면 id가 14인 객체 페이지로 이동하게됩니다. 아래 그림을 참고해주세요. GET 주소가 ~~~~/14로 변경된 것을 확인 할 수 있죠. 객체 페이지로 이동하면 delete나 update 기능을 수행할 수 있고요. url 필드는 기본적으로 제공되는 것인데요. 그러니깐 model에 url 이라는 필드가 존재하지는 않아요.se.. 더보기
django rest framework serializer.is_valid() false, errors print 간단하게 기록용 !! django rest framework에서 views.py 단에서 주로 사용자의 request에 대해 serializer 연결을 합니다. 특히 create() 함수 그러니깐 post 요청, 다시 말해서 사용자가 먼가를 생성하는 요청을 한 경우에 사용자가 입력한 값이 적절한지 serializer에 is_valid() 함수를 통해 검토하고 save 해야 합니다 !! 말로 하니깐 알아보기가 불편하네요. 역시 코드가 이해하기 편한 것 같아요. 아무튼 views.py 를 잠시 살펴보시죠. @permission_classes((IsAdminUser, ))class TestDataViewSet(viewsets.ModelViewSet): queryset = TestData.objects.all().. 더보기
DRF - ModelViewSet Custom Method 저는 Django REST Framework 를 통해서 Restful API를 만들 때 View 단에서는 ModelViewSet을 주로 활용하고 있어요.그냥 왠만한 것은 그냥 사용해도 되고, Custom이 필요할 때는 필요한 Method만 Override 해서 사용하면 좋더라구요. 예를 들어서 Get으로 들어오는 요청은 list 함수를 Override하면 되고 Post 요청은 create 함수를 Override 하면 됩니다.함수를 호출하는 것은 Router에서 이뤄지기 때문에 어떤 Router를 사용하느냐에 따라 약간 달라질 수 있겠습니다. DRF Homepage에 보면 http://www.django-rest-framework.org/api-guide/routers/Router에 대해 자세히 설명되어 .. 더보기
DRF - Method 제한, 허용 Django Rest Framework에서 특정 Method만 허용하고 싶다면 다르게 말하면 특정한 Method만 사용할 수 있도록 제한하고 싶으면 Viewset에 http_method_names 속성을 적용하면 됩니다. 이것은 django에서 제공하는 속성이고 좀 더 rest framework 답게 사용하는 방법도 존재하지만 저한테는 이게 더 편한거 같아요. 아래 그림은 post만 허용한 상태에 대한 예제를 나타냅니다. 그림에서 나타난 것 처럼 Allow에 POST만 보입니다. 아래 그림들은 Get과 Post 방식을 허용한 상태를 나타냅니다. 그림에서 볼 수 있는 것 처럼 POST,GET 방식이 허용되고 하단에는 GET으로 얻어진 값들이 출력됩니다. :) 더보기
DRF - Django Rest Delete 403 Error Delete 요청을 Django Rest Framework로 보내는 것에서 헤맸다. 일단 jQuery를 활용하여 Post 요청을 하는 예시를 보면 아래와 같다. jQuery기반의 cookie 라이브러리를 사용하고 있는데 아무튼 위와 같은 소스를 통해 DRF 기반의 restful API에 요청하는 것이 가능했다. 당연히 위와 같은 방법으로 delete도 실험했는데 이상하게 delete는 잘 안되고 아래와 같은 에러가 발생했다.CSRF 에러 !! 해결하기 위해서는 post와는 조금 다르게 ajax 셋팅이 필요했다.CSRF Token 값을 beforeSend를 통해 전달해야한다. post도 위와 같은 방식으로 가능한지 테스트를 해봐야겠다.!!방금해봤다!! 가능하다!!! 그럼 아래 방식으로 통일해서 사용해야겠다.. 더보기