From 80d40b5daa53236d670c1ba0ff813360edaf298d Mon Sep 17 00:00:00 2001 From: xiaji Date: Mon, 26 Jan 2026 22:35:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(api):=20=E4=B8=BA=E6=B1=87=E6=80=BB?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8F=90=E4=BA=A4=E6=B7=BB=E5=8A=A0=E6=9D=A5?= =?UTF-8?q?=E6=BA=90=E9=AA=8C=E8=AF=81=E5=92=8C=E6=9D=A5=E6=BA=90=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 api_submit_summary 的 csrf_exempt 装饰器 - 允许客户端提交来源字段 - 在提交工具中添加来源输入框 - 自动生成来源信息当未提供时 --- core/views.py | 16 +++++++++++----- submit_summary_tool.py | 20 ++++++++++++++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/core/views.py b/core/views.py index 69c236d..1a489ec 100644 --- a/core/views.py +++ b/core/views.py @@ -806,7 +806,6 @@ def pdf_list(request): return render(request, 'core/pdf_list.html', context) -@csrf_exempt def api_submit_summary(request): """API提交汇总记录 - 仅接受指定分类和发言人的记录""" logger.info("API: 收到汇总记录提交请求") @@ -835,10 +834,17 @@ def api_submit_summary(request): 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})" + # 获取来源,支持客户端提交 + source = request.POST.get('source', '').strip() + if not source: + source = "" + + # 如果没有提供来源,自动生成 + if not source: + import socket + hostname = socket.gethostname() + local_ip = socket.gethostbyname(hostname) + source = f"{hostname} ({local_ip})" summary = Summary.objects.create( date=timezone.now().date(), diff --git a/submit_summary_tool.py b/submit_summary_tool.py index 2b500d0..45e793c 100644 --- a/submit_summary_tool.py +++ b/submit_summary_tool.py @@ -153,10 +153,17 @@ class SubmitSummaryTool(QMainWindow): self.content_edit.setPlaceholderText("输入要提交的内容...") self.content_edit.setMaximumHeight(100) + source_layout = QHBoxLayout() + source_layout.addWidget(QLabel("来源:")) + self.source_edit = QLineEdit() + self.source_edit.setPlaceholderText("留空则自动生成") + source_layout.addWidget(self.source_edit) + submit_btn = QPushButton("提交汇总记录") submit_btn.clicked.connect(self.manual_submit) layout.addWidget(self.content_edit) + layout.addLayout(source_layout) layout.addWidget(submit_btn) group.setLayout(layout) @@ -264,7 +271,7 @@ class SubmitSummaryTool(QMainWindow): def auto_submit_content(self): """自动提交系统监控内容""" content = self.get_system_content() - self.submit_summary(content) + self.submit_summary(content, source=None) def manual_submit(self): """手动提交""" @@ -272,7 +279,8 @@ class SubmitSummaryTool(QMainWindow): if not content: QMessageBox.warning(self, "警告", "请输入要提交的内容") return - self.submit_summary(content) + source = self.source_edit.text().strip() + self.submit_summary(content, source) self.content_edit.clear() def get_csrf_token(self): @@ -299,7 +307,7 @@ class SubmitSummaryTool(QMainWindow): self.log(f"获取CSRF token失败: {str(e)}") return None, None - def submit_summary(self, content): + def submit_summary(self, content, source=""): """提交汇总记录到家庭日报系统""" submit_url = f"{self.server_url}/api/v1/summary/submit/" @@ -321,7 +329,11 @@ class SubmitSummaryTool(QMainWindow): self.log(f"设置CSRF header: X-CSRFToken = {csrf_token[:20]}...") self.log(f"发送POST请求到: {submit_url}") - response = session.post(submit_url, data={'content': content}, headers=headers, timeout=10) + post_data = {'content': content} + if source: + post_data['source'] = source + self.log(f"提交来源: {source}") + response = session.post(submit_url, data=post_data, headers=headers, timeout=10) self.log(f"服务器响应状态码: {response.status_code}") self.log(f"响应Headers: {dict(response.headers)}")