Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions drfTuto/custom_renderer
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from rest_framework import renderers

class CustomRenderer(renderers.BaseRenderer):

def render(self, data, accepted_media_type=None, renderer_context=None):
response_data = renderer_context.get('response')

response = {
'status': response_data.status_text,
'data': data
}

return super(CustomRenderer, self).render(response, accepted_media_type, renderer_context)
9 changes: 9 additions & 0 deletions drfTuto/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_filters',
] + PSJ_APPS


Expand Down Expand Up @@ -77,14 +78,22 @@

# REST FRAMEWORK
REST_FRAMEWORK = {
'''
'DEFAULT_RENDERER_CLASSES': (
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
),
'''
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
'DEFAULT_PARSER_CLASSES': (
'djangorestframework_camel_case.parser.CamelCaseFormParser',
'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',
'djangorestframework_camel_case.parser.CamelCaseJSONParser',
)
"EXCEPTION_HANDLER": "user.utils.custom_exception_handler"
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}

# Database
Expand Down
1 change: 1 addition & 0 deletions drfTuto/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('user.urls')),
#path("api-auth/", include("rest_framework.urls")),
]
34 changes: 34 additions & 0 deletions drfTuto/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from rest_framework.views import exception_handler

def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)

# Now add the HTTP status code to the response.
if response is not None:
if isinstance(exc, Http404):
customized_response = {"code": response.status_code, "details": "Not Found"}
elif isinstance(exc, exceptions.NotFound):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.MethodNotAllowed):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.NotAcceptable):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.UnsupportedMediaType):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.AuthenticationFailed):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.PermissionDenied):
customized_response = {"code": response.status_code, "details": exc.detail}
elif isinstance(exc, exceptions.NotAuthenticated):
customized_response = {"code": response.status_code, "details": exc.detail}
else:
customized_response = {
"code": response.status_code,
"details": response.data,
}

response.data = customized_response

return response
20 changes: 8 additions & 12 deletions user/generics_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
from rest_framework import generics, mixins
from rest_framework.response import Response
from datetime import datetime
from rest_framework import status

class UserList(generics.ListCreateAPIView):
queryset = MyUser.objects.all()
queryset = User.objects.filter(is_active=True).all()
serializer_class = UserSerializer
filter_backends = [filters.SearchFilter]
search_fields = ["nickname", "email"]

class UserDetail(generics.RetrieveUpdateDestroyAPIView):

class UserDetail(generics.RetireveAPIView): #검색
queryset = MyUser.objects.all()
serialzier_class = UserSerializer

class UserUpdate(generics.UpdateAPIView): #업데이트
queryset = MyUser.objects.all()
serialzier_class = UserSerializer
serializer_class = UserSerializer

def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
Expand All @@ -28,14 +28,10 @@ def update(self, request, *args, **kwargs):
)
return Response(serializer.data, status=status.HTTP_200_OK)

class UserDestroy(generics.DestroyAPIView):
queryset = MyUser.objects.all()
serialzier_class = UserSerializer

def delete(self, request, *args, **kwargs):
instance = self.get_object()
instance.is_active = False
instance.save(update_fields=["is_active"])
serializer = UserSerializer(instance)

return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.data, status=status.HTTP_200_OK)
7 changes: 3 additions & 4 deletions user/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from user.views import UserView
from user import generics_views

urlpatterns = [
#path('', views.UserList.as_view()),
#path('<int:pk>/', views.UserDetail.as_view()),
path("", generics_views.UserList.as_view(), name="user_list"),
path("<int:pk>/", generics_views.UserDetail.as_view(), name="user_detail"),
]
18 changes: 18 additions & 0 deletions user/viewsets_urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django.urls import path, include
from rest_framework.urlpatterns import format_suffix_patterns
from user.views import UserView

user_list = UserView.as_view({
'get': 'list',
'post': 'create'
})

user_detail = UserView.as_view({
'get': 'retrieve',
'patch': 'partial_update',
})

urlpatterns = format_suffix_patterns([
path("/", user_list, name="user_list"),
path("<int:pk>/", user_detail, name="user_detail")
])