Files
pthelper/apps/common/views_request.py
2022-10-27 09:09:26 +08:00

114 lines
3.7 KiB
Python

from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.conf import settings
from django.core.management import call_command
import logging
import tempfile
import os
from datetime import datetime
import simplejson as json
#==================
@login_required
def backupExport(request):
"""
备份数据
"""
logger = logging.getLogger('django')
if request.method == "POST":
#backup_file = os.path.join(settings.BACKUP_DIR,'pthelper.json')
backup_file = os.path.join(settings.BACKUP_DIR,'export_{}.json'.format(datetime.now().strftime("%Y-%m-%d_%H-%M")))
logger.info("开始导出数据.")
with tempfile.TemporaryDirectory() as d:
dump_path = os.path.join(d, 'dump.json')
#call_command('dumpdata', '--exclude','cron.Log',natural_foreign=True, output=dump_path)
#call_command('dumpdata', exclude=['cron.Log'], natural_foreign=True, output=dump_path, format='json', indent=4)
call_command('dumpdata', exclude=['authtoken.Token'], natural_foreign=True, natural_primary=True, output=dump_path, format='json', indent=4)
logger.info("备份完成.")
logger.info("开始转换备份文件 %s...", backup_file)
#将乱码转换成中文
with open(dump_path) as f:
data = json.load(f)
with open(backup_file, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
logger.info('转换完成.')
#backup_path = os.path.join(settings.BACKUP_DIR, datetime.date.today().strftime("%Y-%m-%d.zip"))
#with zipfile.ZipFile(backup_path, mode='w') as backup_zip:
#for root, dirs, files in os.walk(d):
#for file in files:
#filepath = os.path.join(root, file)
#logger.info("Compressing {}...".format(filepath))
#backup_zip.write(filepath,
#arcname=os.path.relpath(filepath, d))
#logger.info("{} created.".format(backup_path))
response_data={"code":1,"msg":"备份完成" }
return JsonResponse(response_data)
#==================
@login_required
def backupImport(request):
"""
数据恢复
"""
if request.method == "POST":
name = request.POST.get('name')
backup_file = os.path.join(settings.BACKUP_DIR, name)
try:
call_command('loaddata', backup_file)
response_data={"code":1,"msg":"恢复完成" }
except Exception as e:
response_data={"code":0,"msg":"恢复失败" + str(e) }
return JsonResponse(response_data)
#==================
@login_required
def backupList(request):
"""
列出备份数据
"""
data = {}
data['code'] = 0
data['msg'] = ""
data['data'] = []
for file_name in os.listdir(settings.BACKUP_DIR):
data['data'].append({"name":file_name,
"url": "/backups/" + file_name
})
return JsonResponse(data)
#==================
@login_required
def backupDel(request):
"""
删除备份数据
"""
name = request.POST.get('name')
backup_file = os.path.join(settings.BACKUP_DIR, name)
try:
os.remove(backup_file)
response_data={"code":1,"msg":"删除成功" }
except Exception as e:
response_data={"code":0,"msg":"删除失败" + str(e) }
return JsonResponse(response_data)