feat(api): 添加汇总记录提交API接口

添加新的API端点/api/v1/summary/submit/用于外部客户端提交汇总记录
自动设置分类为"定期",发言人为"机器人"
包含请求参数验证和错误处理
更新README文档添加API使用说明和示例代码
This commit is contained in:
2026-01-25 21:36:48 +08:00
parent d5fb589bb5
commit 143e228d8d
3 changed files with 225 additions and 0 deletions

View File

@@ -29,6 +29,9 @@ urlpatterns = [
path('summaries/<int:pk>/edit/', views.edit_summary, name='edit_summary'),
path('summaries/<int:pk>/delete/', views.delete_summary, name='delete_summary'),
# API - 汇总记录提交
path('api/v1/summary/submit/', views.api_submit_summary, name='api_submit_summary'),
# 家庭事项
path('family-tasks/', views.family_tasks, name='family_tasks'),
path('family-tasks/add/', views.add_family_task, name='add_family_task'),

View File

@@ -804,3 +804,57 @@ def pdf_list(request):
}
return render(request, 'core/pdf_list.html', context)
def api_submit_summary(request):
"""API提交汇总记录 - 仅接受指定分类和发言人的记录"""
logger.info("API: 收到汇总记录提交请求")
if request.method != 'POST':
return JsonResponse({'success': False, 'message': '只支持POST请求'}, status=405)
try:
import socket
import uuid
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)
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)