feat(api): 为汇总记录提交添加来源验证和来源字段
- 移除 api_submit_summary 的 csrf_exempt 装饰器 - 允许客户端提交来源字段 - 在提交工具中添加来源输入框 - 自动生成来源信息当未提供时
This commit is contained in:
@@ -806,7 +806,6 @@ def pdf_list(request):
|
|||||||
|
|
||||||
return render(request, 'core/pdf_list.html', context)
|
return render(request, 'core/pdf_list.html', context)
|
||||||
|
|
||||||
@csrf_exempt
|
|
||||||
def api_submit_summary(request):
|
def api_submit_summary(request):
|
||||||
"""API提交汇总记录 - 仅接受指定分类和发言人的记录"""
|
"""API提交汇总记录 - 仅接受指定分类和发言人的记录"""
|
||||||
logger.info("API: 收到汇总记录提交请求")
|
logger.info("API: 收到汇总记录提交请求")
|
||||||
@@ -835,10 +834,17 @@ def api_submit_summary(request):
|
|||||||
logger.error(f"API: 发言人 '{speaker_name}' 不存在")
|
logger.error(f"API: 发言人 '{speaker_name}' 不存在")
|
||||||
return JsonResponse({'success': False, 'message': f"发言人 '{speaker_name}' 不存在"}, status=400)
|
return JsonResponse({'success': False, 'message': f"发言人 '{speaker_name}' 不存在"}, status=400)
|
||||||
|
|
||||||
import socket
|
# 获取来源,支持客户端提交
|
||||||
hostname = socket.gethostname()
|
source = request.POST.get('source', '').strip()
|
||||||
local_ip = socket.gethostbyname(hostname)
|
if not source:
|
||||||
source = f"{hostname} ({local_ip})"
|
source = ""
|
||||||
|
|
||||||
|
# 如果没有提供来源,自动生成
|
||||||
|
if not source:
|
||||||
|
import socket
|
||||||
|
hostname = socket.gethostname()
|
||||||
|
local_ip = socket.gethostbyname(hostname)
|
||||||
|
source = f"{hostname} ({local_ip})"
|
||||||
|
|
||||||
summary = Summary.objects.create(
|
summary = Summary.objects.create(
|
||||||
date=timezone.now().date(),
|
date=timezone.now().date(),
|
||||||
|
|||||||
@@ -153,10 +153,17 @@ class SubmitSummaryTool(QMainWindow):
|
|||||||
self.content_edit.setPlaceholderText("输入要提交的内容...")
|
self.content_edit.setPlaceholderText("输入要提交的内容...")
|
||||||
self.content_edit.setMaximumHeight(100)
|
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 = QPushButton("提交汇总记录")
|
||||||
submit_btn.clicked.connect(self.manual_submit)
|
submit_btn.clicked.connect(self.manual_submit)
|
||||||
|
|
||||||
layout.addWidget(self.content_edit)
|
layout.addWidget(self.content_edit)
|
||||||
|
layout.addLayout(source_layout)
|
||||||
layout.addWidget(submit_btn)
|
layout.addWidget(submit_btn)
|
||||||
|
|
||||||
group.setLayout(layout)
|
group.setLayout(layout)
|
||||||
@@ -264,7 +271,7 @@ class SubmitSummaryTool(QMainWindow):
|
|||||||
def auto_submit_content(self):
|
def auto_submit_content(self):
|
||||||
"""自动提交系统监控内容"""
|
"""自动提交系统监控内容"""
|
||||||
content = self.get_system_content()
|
content = self.get_system_content()
|
||||||
self.submit_summary(content)
|
self.submit_summary(content, source=None)
|
||||||
|
|
||||||
def manual_submit(self):
|
def manual_submit(self):
|
||||||
"""手动提交"""
|
"""手动提交"""
|
||||||
@@ -272,7 +279,8 @@ class SubmitSummaryTool(QMainWindow):
|
|||||||
if not content:
|
if not content:
|
||||||
QMessageBox.warning(self, "警告", "请输入要提交的内容")
|
QMessageBox.warning(self, "警告", "请输入要提交的内容")
|
||||||
return
|
return
|
||||||
self.submit_summary(content)
|
source = self.source_edit.text().strip()
|
||||||
|
self.submit_summary(content, source)
|
||||||
self.content_edit.clear()
|
self.content_edit.clear()
|
||||||
|
|
||||||
def get_csrf_token(self):
|
def get_csrf_token(self):
|
||||||
@@ -299,7 +307,7 @@ class SubmitSummaryTool(QMainWindow):
|
|||||||
self.log(f"获取CSRF token失败: {str(e)}")
|
self.log(f"获取CSRF token失败: {str(e)}")
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
def submit_summary(self, content):
|
def submit_summary(self, content, source=""):
|
||||||
"""提交汇总记录到家庭日报系统"""
|
"""提交汇总记录到家庭日报系统"""
|
||||||
submit_url = f"{self.server_url}/api/v1/summary/submit/"
|
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"设置CSRF header: X-CSRFToken = {csrf_token[:20]}...")
|
||||||
|
|
||||||
self.log(f"发送POST请求到: {submit_url}")
|
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"服务器响应状态码: {response.status_code}")
|
||||||
self.log(f"响应Headers: {dict(response.headers)}")
|
self.log(f"响应Headers: {dict(response.headers)}")
|
||||||
|
|||||||
Reference in New Issue
Block a user