views.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # 视图和调度模块:views.py
  2. from django.http import JsonResponse
  3. from django.views.decorators.csrf import csrf_exempt
  4. from django.views.decorators.http import require_POST
  5. from .backup_utils import backup_database
  6. from apscheduler.schedulers.background import BackgroundScheduler
  7. from django.conf import settings
  8. import logging
  9. logger = logging.getLogger(__name__)
  10. # 初始化调度器
  11. scheduler = BackgroundScheduler()
  12. def scheduled_backup():
  13. """定时备份任务"""
  14. try:
  15. backup_path = backup_database()
  16. logger.info(f"定时备份完成: {backup_path}")
  17. except Exception as e:
  18. logger.error(f"定时备份失败: {str(e)}")
  19. # 启动定时备份(每小时执行一次)
  20. if not scheduler.running:
  21. scheduler.add_job(
  22. scheduled_backup,
  23. 'cron',
  24. hour='*/6', # 每6小时执行一次
  25. minute=0, # 在0分钟时执行
  26. id='db_backup_job'
  27. )
  28. scheduler.start()
  29. @csrf_exempt
  30. @require_POST
  31. def trigger_backup(request):
  32. """手动触发备份的API接口"""
  33. try:
  34. backup_path = backup_database()
  35. return JsonResponse({
  36. 'status': 'success',
  37. 'message': 'Database backup completed',
  38. 'path': backup_path
  39. })
  40. except Exception as e:
  41. return JsonResponse({
  42. 'status': 'error',
  43. 'message': str(e)
  44. }, status=500)