diff --git a/core/views.py b/core/views.py index 2c9da08..69c236d 100644 --- a/core/views.py +++ b/core/views.py @@ -4,6 +4,7 @@ from django.utils import timezone from django.db.models import Count from django.core.mail import send_mail, EmailMessage from django.conf import settings +from django.views.decorators.csrf import csrf_exempt from datetime import timedelta, datetime import os from loguru import logger @@ -804,3 +805,56 @@ def pdf_list(request): } return render(request, 'core/pdf_list.html', context) + +@csrf_exempt +def api_submit_summary(request): + """API提交汇总记录 - 仅接受指定分类和发言人的记录""" + logger.info("API: 收到汇总记录提交请求") + + if request.method != 'POST': + return JsonResponse({'success': False, 'message': '只支持POST请求'}, status=405) + + try: + content = request.POST.get('content', '').strip() + + if not content: + return JsonResponse({'success': False, 'message': '内容不能为空'}, status=400) + + category_name = "定期" + speaker_name = "机器人" + + try: + category = SummaryCategory.objects.get(name=category_name) + except SummaryCategory.DoesNotExist: + logger.error(f"API: 分类 '{category_name}' 不存在") + return JsonResponse({'success': False, 'message': f"分类 '{category_name}' 不存在"}, status=400) + + try: + speaker = FamilyMember.objects.get(name=speaker_name) + except FamilyMember.DoesNotExist: + logger.error(f"API: 发言人 '{speaker_name}' 不存在") + return JsonResponse({'success': False, 'message': f"发言人 '{speaker_name}' 不存在"}, status=400) + + import socket + hostname = socket.gethostname() + local_ip = socket.gethostbyname(hostname) + source = f"{hostname} ({local_ip})" + + summary = Summary.objects.create( + date=timezone.now().date(), + category=category, + speaker=speaker, + content=content, + source=source + ) + + logger.info(f"API: 汇总记录创建成功,ID={summary.id}") + return JsonResponse({ + 'success': True, + 'message': '提交成功', + 'id': summary.id + }) + + except Exception as e: + logger.error(f"API: 提交汇总记录失败: {str(e)}") + return JsonResponse({'success': False, 'message': f"提交失败: {str(e)}"}, status=500)