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)
|
||||
|
||||
@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(),
|
||||
|
||||
@@ -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)}")
|
||||
|
||||
Reference in New Issue
Block a user