데이터 내보내기 및 가져오기 방법 | Django 패키지 시리즈 #3

안녕 DEV!



Django 패키지 시리즈의 세 번째 게시물에 오신 것을 환영합니다. 이 게시물에서 우리는 데이터를 쉽게 가져오고 내보낼 수 있는 최고의 Django 패키지 중 하나를 배울 것입니다.

비디오 튜토리얼이 있는 유튜브 채널 -

계속하기 전에 Reverse Python을 방문하여 Python에 대한 더 멋진 내용을 찾아보십시오.



더 이상 사용할 수 없는 기사





장고 가져오기 내보내기



django-import-export 라이브러리는 xls, csv, json, yaml 및 tablib에서 지원하는 기타 모든 형식을 포함한 여러 형식을 지원합니다. 또한 Django 관리 통합 기능이 있어 사용하기 정말 편리합니다.

설치 및 구성



더 잘 이해할 수 있도록 프로젝트를 만들어 봅시다. 대시보드라는 새 Django 프로젝트를 만들고 그 안에 보고서라는 새 앱을 만듭니다.

패키지를 설치하려면 다음 명령을 실행합니다.


pip install django-import-export

그런 다음 settings.py에서 앱 이름(보고서) 및 가져오기-내보내기 라이브러리를 INSTALLED_APPS에 추가합니다.

INSTALLED_APPS = (
    ...
    'import_export',
    'reports'
)

또한 settings.py 끝에 선택적 구성을 추가하는 것이 좋습니다.

IMPORT_EXPORT_USE_TRANSACTIONS = True

기본값은 거짓입니다. 라이브러리가 데이터 가져오기에서 데이터베이스 트랜잭션을 사용할지 여부를 결정합니다.

After this section I will show you main parts of the project. If you don't know how to configure urls.py or templates, I will put GitHub repo link end of this post, so you can clone and run the project.


모델 및 리소스 만들기



models.py에서 Employee라는 모델을 만듭니다.

from django.db import models

class Employee(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=60)
    email = models.EmailField(blank=True)
    day_started = models.DateField()
    location = models.CharField(max_length=100, blank=True)

    def __str__(self):
        return self.first_name

django-import-export 라이브러리는 Django가 모델 양식 및 관리 클래스를 처리하는 방법과 매우 유사한 클래스 정의인 리소스 개념과 함께 작동합니다.

Django admin에서 직접 데이터를 처리하려면 admin.py 파일에 코드를 넣어야 합니다.

하지만 이 프로젝트에 대한 우리의 구현은 Django admin과 관련이 없으므로 app 폴더 안에 resources.py 파일을 생성해 보겠습니다.

from import_export import resources
from .models import Employee

class EmployeeResource(resources.ModelResource):
    class Meta:
        model = Employee

데이터 내보내기



글쎄, 우리는 양식을 만들고 사용자가 파일 형식을 선택하도록 할 것입니다. views.py 업데이트:

from django.shortcuts import render
from django.http import HttpResponse
from tablib import Dataset

from .resources import EmployeeResource
from .models import Employee

def export_data(request):
    if request.method == 'POST':
        # Get selected option from form
        file_format = request.POST['file-format']
        employee_resource = EmployeeResource()
        dataset = employee_resource.export()
        if file_format == 'CSV':
            response = HttpResponse(dataset.csv, content_type='text/csv')
            response['Content-Disposition'] = 'attachment; filename="exported_data.csv"'
            return response        
        elif file_format == 'JSON':
            response = HttpResponse(dataset.json, content_type='application/json')
            response['Content-Disposition'] = 'attachment; filename="exported_data.json"'
            return response
        elif file_format == 'XLS (Excel)':
            response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel')
            response['Content-Disposition'] = 'attachment; filename="exported_data.xls"'
            return response   

    return render(request, 'export.html')

매우 간단합니다. 사용자가 JSON을 선택하면 파일이 JSON으로 내보내지고 사용자가 CSV를 선택하면 파일이 CSV로 내보내집니다.

내보내기.html

{% extends 'base.html' %}

{% block content %}
<h3>Export Data</h3>
<p>exporting from database</p>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <p>Please select format of file.</p>
    <select name="file-format" class="form-control my-3">
        <option selected>Choose format...</option>
        <option>CSV</option>
        <option>JSON</option>
        <option>XLS (Excel)</option>
      </select>
    <button class="btn btn-primary" type="submit">Export</button>
  </form>
  <a href="{% url 'home' %}">Return Home View</a>
  {% endblock %} 

데이터 가져오기



직원.csv라는 파일이 있다고 가정합니다.

first_name,last_name,email,day_started,location,id
Peter,Parker,[email protected],2015-05-18,New York,
James,Bond,[email protected],2014-08-11,London,

ID는 기본 키이므로 존재해야 합니다. 자동으로 생성됩니다.

따라서 CSV 또는 JSON 파일을 데이터베이스로 가져와야 합니다. views.py에 다음 기능을 추가합니다.

def import_data(request):
    if request.method == 'POST':
        file_format = request.POST['file-format']
        employee_resource = EmployeeResource()
        dataset = Dataset()
        new_employees = request.FILES['importData']

        if file_format == 'CSV':
            imported_data = dataset.load(new_employees.read().decode('utf-8'),format='csv')
            result = employee_resource.import_data(dataset, dry_run=True)                                                                 
        elif file_format == 'JSON':
            imported_data = dataset.load(new_employees.read().decode('utf-8'),format='json')
            # Testing data import
            result = employee_resource.import_data(dataset, dry_run=True) 

        if not result.has_errors():
            # Import now
            employee_resource.import_data(dataset, dry_run=False)

    return render(request, 'import.html')    


사용자가 가져올 파일 형식을 선택하도록 합니다.

import.html

{% extends 'base.html' %}

{% block content %}
<h3>Import Data</h3>
<p>importing to database</p>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="importData">
    <p>Please select format of file.</p>
    <select name="file-format" class="form-control my-3">
        <option selected>Choose format...</option>
        <option>CSV</option>
        <option>JSON</option>
      </select>
    <button class="btn btn-primary" type="submit">Import</button>
  </form>
<a href="{% url 'home' %}">Return Home View</a>
  {% endblock %} 

파일을 가져온 후 관리자를 확인하면 모델에서 가져온 데이터를 볼 수 있습니다.

장고 관리자



관리자에서 가져오기 내보내기를 사용하려면 admin.py에 다음 코드를 추가하기만 하면 됩니다.

from import_export.admin import ImportExportModelAdmin
from django.contrib import admin
from .models import Employee

@admin.register(Employee)
class EmployeeAdmin(ImportExportModelAdmin):
    pass

다음과 같이 표시됩니다.



GitHub



여러분 중 일부는 혼란스러울 수 있으므로 내 GitHub에서 프로젝트를 복제하고 작업을 수행하는 것이 좋습니다. 이 프로젝트에 대한 내 GitHub 링크는 다음과 같습니다.


파일롯 / Django-가져오기-내보내기


django-import-export 패키지를 사용하여 보고서 가져오기 내보내기 앱(튜토리얼)





Django-가져오기-내보내기


django-import-export 패키지를 사용하여 앱 보고(튜토리얼)

시작하기


이 튜토리얼은 Python 3+ 및 Django 2+에서 작동합니다.
종속성 설치:
python3 -m pip3 install -r requirements.txt
다음 명령을 실행하십시오.
python3 manage.py makemigrations reports
python3 manage.py migrate
python3 manage.py runserver


View on GitHub


임무 완수!



잘 했어! 오늘 정말 유용한 정보를 배웠습니다. django-import-export에 대한 자세한 내용은 살펴보십시오Documentation.

튜토리얼이 마음에 들면 Reverse Python을 방문하여 Python에 대한 더 멋진 내용을 찾아보십시오.



더 이상 사용할 수 없는 기사

좋은 웹페이지 즐겨찾기