반응형
Django REST Framework에서 커스텀 JSON을 반환하는 방법
커스텀 json을 반환하려고 합니다.get_queryset
하지만 항상 얻을 수 있다404 error
응답으로.
class TestViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Test.objects.all()
serializer_class = TestSerializer
def get_queryset(self):
if self.request.method == "GET":
content = {'user_count': '2'}
return HttpResponse(json.dumps(content), content_type='application/json')
처음부터 모두 삭제하면def
표준 json 데이터로 정확한 답변을 드리겠습니다.내가 뭘 잘못하고 있지?
Model View가 필요 없는 경우GET 요구에 대해 커스텀 JSON을 설정하고 싶다.
모델을 필요로 하지 않는를 사용할 수도 있습니다.
class MyOwnView(APIView):
def get(self, request):
return Response({'some': 'data'})
그리고.
urlpatterns = [
url(r'^my-own-view/$', MyOwnView.as_view()),
]
Model View 사용 시세트
커스텀 JSON을 get_queryset에 넣었습니다.틀렸습니다.를 사용하는 경우ModelViewSet
이것만으로 충분합니다.
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
이것.ModelViewSet
에는 디폴트 실장이 포함되어 있습니다..list()
,.retrieve()
,.create()
,.update()
,그리고..destroy()
필요에 따라 덮어쓰기(커스터마이즈)할 수 있습니다.
에서 커스텀 JSON을 반환하는 중.retrieve()
및/또는.list()
에ModelViewSet
예: 덮어쓰기.retrieve()
단일 개체를 검색할 때 사용자 지정 보기를 반환합니다.디폴트 실장은 다음과 같습니다.
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
예를 들어 커스텀 JSON을 반환하는 경우:
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
def retrieve(self, request, *args, **kwargs):
return Response({'something': 'my custom JSON'})
def list(self, request, *args, **kwargs):
return Response({'something': 'my custom JSON'})
Model View를 사용하여 클래스 기반 뷰에서 응답을 커스터마이즈하는 방법은 두 가지가 있습니다.세트
해결책 1: 뷰의 커스텀.화이
class StoryViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.AllowAny,)
queryset = Story.objects.all()
serializer_class = StorySerializer
def retrieve(self, request, *args, **kwargs):
# ret = super(StoryViewSet, self).retrieve(request)
return Response({'key': 'single value'})
def list(self, request, *args, **kwargs):
# ret = super(StoryViewSet, self).list(request)
return Response({'key': 'list value'})
솔루션 2: serializers.py에서의 커스텀 (이 솔루션을 추천합니다)
class StorySerializer(serializers.ModelSerializer):
class Meta:
model = Story
fields = "__all__"
def to_representation(self, instance):
ret = super(StorySerializer, self).to_representation(instance)
# check the request is list view or detail view
is_list_view = isinstance(self.instance, list)
extra_ret = {'key': 'list value'} if is_list_view else {'key': 'single value'}
ret.update(extra_ret)
return ret
언급URL : https://stackoverflow.com/questions/35019030/how-to-return-custom-json-in-django-rest-framework
반응형
'programing' 카테고리의 다른 글
woocommerce에서 현재 사용자의 모든 주문을 가져오는 방법 (0) | 2023.03.01 |
---|---|
Angular를 사용하여 새 모델 저장JS 및 $리소스 (0) | 2023.03.01 |
powershell 3에서 json을 예쁘게 하다 (0) | 2023.03.01 |
React 16의 hydrate()와 render()의 차이점은 무엇입니까? (0) | 2023.03.01 |
웹 소켓 프레임 크기 제한 (0) | 2023.03.01 |