mirror of
https://github.com/xingsu1021/pthelper.git
synced 2026-02-06 11:54:09 +08:00
114 lines
3.7 KiB
Python
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)
|
|
|