diff --git a/ESConnect.py b/ESConnect.py index 3c93b03..f7d83db 100644 --- a/ESConnect.py +++ b/ESConnect.py @@ -40,6 +40,9 @@ def create_index_with_mapping(): else: print(f"索引 {index_name} 已存在") +def update_document(es, index_name, doc_id=None, updated_doc=None): + """更新指定ID的文档""" + es.update(index=index_name, id=doc_id, body={"doc": updated_doc}) def get_doc_id(data): @@ -122,6 +125,49 @@ def delete_by_id(doc_id): print("删除失败:", str(e)) return False +def update_by_id(doc_id, updated_data): + """ + 根据文档ID更新数据 + + 参数: + doc_id (str): 要更新的文档ID + updated_data (dict): 更新的数据内容 + + 返回: + bool: 更新成功返回True,失败返回False + """ + try: + # 执行更新操作 + es.update(index=index_name, id=doc_id, body={"doc": updated_data}) + print(f"文档 {doc_id} 更新成功") + return True + except Exception as e: + print(f"更新失败: {str(e)}") + return False + +def get_by_id(doc_id): + """ + 根据文档ID获取单个文档 + + 参数: + doc_id (str): 要获取的文档ID + + 返回: + dict or None: 成功返回文档数据,失败返回None + """ + try: + # 执行获取操作 + result = es.get(index=index_name, id=doc_id) + if result['found']: + return { + "_id": result['_id'], + **result['_source'] + } + return None + except Exception as e: + print(f"获取文档失败: {str(e)}") + return None + def search_by_any_field(keyword): """全字段模糊搜索(支持拼写错误)""" try: diff --git a/app.py b/app.py index 2d5b7f7..23ce270 100644 --- a/app.py +++ b/app.py @@ -276,6 +276,83 @@ def show_all(): return render_template('all.html', data=processed_data) +# 编辑数据页面路由 +@app.route('/edit/') +def edit_entry(doc_id): + """ + 渲染编辑页面 + + 参数: + doc_id (str): 要编辑的文档ID + + 返回: + str: 渲染后的编辑页面或错误信息 + """ + # 获取要编辑的文档数据 + document = get_by_id(doc_id) + if not document: + return "文档不存在", 404 + + # 保持原始数据格式,不进行JSON转换 + # 直接传递包含data字段的原始文档 + return render_template('edit.html', document=document) + +# 更新数据路由 +@app.route('/update/', methods=['POST']) +def update_entry(doc_id): + """ + 处理数据更新请求 + + 参数: + doc_id (str): 要更新的文档ID + + 返回: + 重定向到所有数据页面或错误信息 + """ + # 获取原文档的图片信息 + original_doc = get_by_id(doc_id) + if not original_doc: + return "文档不存在", 404 + + # 从表单中获取所有字段数据 + data_parts = [] + i = 1 + while True: + key_name = request.form.get(f'key_{i}') + field_value = request.form.get(f'field_{i}') + + if not key_name or not field_value: + break + + # 处理字段值(如果是列表格式,用|##|分隔) + if ',' in field_value: + # 如果是逗号分隔的值,转换为列表格式 + items = [item.strip() for item in field_value.split(',') if item.strip()] + if len(items) > 1: + field_value = f"[{'|##|'.join(items)}]" + + data_parts.append(f"{key_name}:{field_value}") + i += 1 + + # 验证是否有数据 + if not data_parts: + return "没有可更新的数据", 400 + + # 构建新的数据字符串 + data_value = "|###|".join(data_parts) + + # 构造更新数据 + updated_data = { + 'data': data_value, + 'image': original_doc.get('image', '') # 保持原图片 + } + + # 更新文档 + if update_by_id(doc_id, updated_data): + return redirect(url_for('show_all')) + else: + return "更新失败", 500 + # 删除数据路由 @app.route('/delete/', methods=['POST']) def delete_entry(doc_id): @@ -295,6 +372,29 @@ def delete_entry(doc_id): +# 提供图片访问的路由 +@app.route('/image/') +def serve_image(filename): + """ + 提供image目录下图片的访问服务 + + 参数: + filename (str): 图片文件名 + + 返回: + 图片文件或404错误 + """ + import os + from flask import send_from_directory + + # 确保文件存在 + image_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'image') + if not os.path.exists(os.path.join(image_dir, filename)): + return "图片不存在", 404 + + # 发送图片文件 + return send_from_directory(image_dir, filename) + # 主程序入口 if __name__ == '__main__': # 创建Elasticsearch索引 diff --git a/templates/all.html b/templates/all.html index 1624534..06a4d28 100644 --- a/templates/all.html +++ b/templates/all.html @@ -81,6 +81,17 @@ cursor: pointer; font-weight: 500; transition: all 0.3s; + margin: 0 2px; + } + + .edit-btn { + background: linear-gradient(to right, #4CAF50, #45a049); + color: white; + } + + .edit-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(76, 175, 80, 0.3); } .delete-btn { @@ -122,7 +133,7 @@

所有已录入的奖项信息

-

在此页面可以查看所有已录入的成果信息,并进行删除操作

+

在此页面可以查看所有已录入的成果信息,并进行编辑和删除操作

@@ -144,9 +155,12 @@ {% endfor %}
{% if item.students is string %}{{ item.students or '无' }}{% else %}{{ item.students|join(', ') if item.students else '无' }}{% endif %} {% if item.teacher is string %}{{ item.teacher or '无' }}{% else %}{{ item.teacher|join(', ') if item.teacher else '无' }}{% endif %} -
- -
+
+ 编辑 +
+ +
+