django return JsonResponse 사용법

2024. 3. 18. 15:19django/Views

Django에서 `JsonResponse` 클래스는 JSON 형식의 응답을 쉽게 반환할 수 있게 해주는 유틸리티입니다. 이 클래스는 `django.http` 모듈에 있으며, 주로 AJAX 요청에 대한 응답으로 사용됩니다.

`JsonResponse` 객체는 파이썬 딕셔너리를 JSON 문자열로 자동 변환해 줍니다. 또한, `Content-Type` 헤더를 `application/json`으로 자동 설정합니다. 사용법은 아주 간단합니다:

### 기본 사용법

```python
from django.http import JsonResponse

def some_view(request):
    data = {
        'key': 'value',
        'key2': 'value2'
    }
    return JsonResponse(data)
```

이 예제에서, `some_view` 함수는 클라이언트에게 JSON 형식의 데이터를 포함한 응답을 반환합니다. 이 경우, 반환되는 JSON 객체는 `{"key": "value", "key2": "value2"}`와 같을 것입니다.

### JsonResponse 인자

- `data`: 응답으로 반환될 데이터. 일반적으로 파이썬 딕셔너리 형태입니다.
- `encoder`: (선택 사항) JSON 인코딩을 위해 사용할 커스텀 인코더. 기본값은 `django.core.serializers.json.DjangoJSONEncoder`입니다.
- `safe`: (선택 사항) 기본적으로 `True`로 설정되어 있으며, 이는 `data` 인자가 딕셔너리일 것으로 가정합니다. 만약 `data`가 딕셔너리가 아니라면 `safe`를 `False`로 설정해야 합니다.

### 비딕셔너리 타입 응답

`JsonResponse`는 기본적으로 `data` 인자가 딕셔너리인 것을 기대합니다. 하지만 리스트나 다른 타입을 JSON으로 반환하고 싶은 경우, `safe` 파라미터를 `False`로 설정해야 합니다:

```python
def my_list_view(request):
    data = ['Python', 'Django', 'JsonResponse']
    return JsonResponse(data, safe=False)
```

### 예제: 에러 응답 반환

클라이언트에게 에러 메시지와 함께 JSON 응답을 반환하는 방법은 다음과 같습니다:

```python
def my_error_view(request):
    data = {
        'error': 'Something went wrong',
        'details': 'More information here'
    }
    return JsonResponse(data, status=500)  # 500은 서버 내부 에러를 나타냅니다.
```

`JsonResponse`를 사용하면 Django에서 JSON 데이터를 클라이언트에 효율적으로 전송할 수 있으며, 특히 JavaScript와 통신하는 웹 애플리케이션을 구축할 때 유용합니다.