views.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. from container.utils import update_container_categories_task
  18. update_container_categories_task()
  19. logger.info(f"定时更新托盘分类完成")
  20. except Exception as e:
  21. logger.error(f"定时备份失败: {str(e)}")
  22. # 启动定时备份(每小时执行一次)
  23. if not scheduler.running:
  24. scheduler.add_job(
  25. scheduled_backup,
  26. 'cron',
  27. hour='*/6', # 每6小时执行一次
  28. minute=0, # 在0分钟时执行
  29. id='db_backup_job'
  30. )
  31. scheduler.start()
  32. @csrf_exempt
  33. @require_POST
  34. def trigger_backup(request):
  35. """手动触发备份的API接口"""
  36. try:
  37. backup_path = backup_database()
  38. return JsonResponse({
  39. 'status': 'success',
  40. 'message': 'Database backup completed',
  41. 'path': backup_path
  42. })
  43. except Exception as e:
  44. return JsonResponse({
  45. 'status': 'error',
  46. 'message': str(e)
  47. }, status=500)