데이터 내보내기 및 가져오기 방법 | Django 패키지 시리즈 #3
20195 단어 djangopythonwebdevproductivity
안녕 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에 대한 더 멋진 내용을 찾아보십시오.
더 이상 사용할 수 없는 기사
Reference
이 문제에 관하여(데이터 내보내기 및 가져오기 방법 | Django 패키지 시리즈 #3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/thepylot/how-to-export-import-data-django-package-series-3-39mk
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip install django-import-export
INSTALLED_APPS = (
...
'import_export',
'reports'
)
IMPORT_EXPORT_USE_TRANSACTIONS = True
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
from import_export import resources
from .models import Employee
class EmployeeResource(resources.ModelResource):
class Meta:
model = Employee
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')
{% 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 %}
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,
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')
{% 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 %}
from import_export.admin import ImportExportModelAdmin
from django.contrib import admin
from .models import Employee
@admin.register(Employee)
class EmployeeAdmin(ImportExportModelAdmin):
pass
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에 대한 더 멋진 내용을 찾아보십시오.
더 이상 사용할 수 없는 기사
Reference
이 문제에 관하여(데이터 내보내기 및 가져오기 방법 | Django 패키지 시리즈 #3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thepylot/how-to-export-import-data-django-package-series-3-39mk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)