WinGyu_coder

Django Python, 장고로 csv, Json 파일 다운로드 구현하기 본문

Django 백엔드의 모든것

Django Python, 장고로 csv, Json 파일 다운로드 구현하기

WinGyu 2024. 3. 5. 12:59

오늘은 Django 장고 프레임 워크를 통해 csv, json 파일 다운로드를 구현할려고 한다.

 

 

우선 각각 라이브러리 및 프레임워크를 가져온다.

from django.http import HttpResponse

# 이건 이제 데이터를 가져올려고 임포트 했다, 가져올 데이터마다
# 예시용
from .models improt CarModel

import json
import csv

 

유저가 요청했을때 DB에 있는 데이터를 꺼낼 수 있고, 웹에서 가져온 데이터를 보낼 수 있고, 그건 개발하는 사람 마다 다르기 때문에 필자는 예시용으로 CarModel을 가져왔다.

 

소스 코드는 아래와 같다

Json 다운로드 예제 코드 1

def download_json_file(request, pk):
    try:
        car = CarModel.objects.get(pk=pk)
    except CarModel.DoesNotExist:
        raise NotFound

    car = car
    result = car["name"]
    data = {
        "pk":pk,
        "car": result,
    }

    # 데이터를 JSON 형식으로 변환
    json_data = json.dumps(data)

    # JSON 파일로 다운로드 받기 위한 HttpResponse 생성
    response = HttpResponse(json_data, content_type='application/json')
    response['Content-Disposition'] = 'attachment; filename="example.json"'

    return response

 

위 코드를 보면 CarModel에서 차 이름을 가져와서 사용자에게 Json 파일을 다운받게 하는 방법이다. 

 

response['Content-Disposition'] = 'attachment; filename="example.json"' 

이 부분에서 example.json 부분을 수정하면 파일명을 바꿀 수 있다.

 

 

그다음 csv 파일이다.

CSV 파일 다운로드 예제코드

def download_csv_file(request, pk):
    try:
        car = CarModel.objects.get(pk=pk)
    except CarModel.DoesNotExist:
        raise NotFound

    # DB에서 정보를 조회하는 가정의 코드
    car = car
    name = car["name"]
    brand = car["brand"]

    response = HttpResponse(
        content_type='text/csv',
        headers={'Content-Disposition': f'attachment; filename="file_name.csv"'},
    )
    # CSV writer 생성
    writer = csv.writer(response)
    # CSV 헤더 작성
    writer.writerow(['brand', "name"])

    # CSV 데이터 행 작성
    writer.writerow([brand, name])

    return response

 

맨 처음 헤더 작성후 아래 내용을 넣으면 된다.