""" ES相关的API视图 """ import json from django.http import JsonResponse from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import csrf_exempt from .es_connect import ( create_index_with_mapping, insert_data, search_data, search_by_any_field, search_all, delete_by_id, update_by_id, get_by_id, write_user_data, get_all_users, delete_user_by_username, update_user_permission ) @require_http_methods(["GET", "POST"]) @csrf_exempt def init_index(request): """初始化ES索引""" try: create_index_with_mapping() return JsonResponse({"status": "success", "message": "索引初始化成功"}) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["POST"]) @csrf_exempt def add_data(request): """添加数据到ES""" try: data = json.loads(request.body.decode('utf-8')) success = insert_data(data) if success: return JsonResponse({"status": "success", "message": "数据添加成功"}) else: return JsonResponse({"status": "error", "message": "数据添加失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["GET"]) def search(request): """搜索数据""" try: query = request.GET.get('q', '') if not query: return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400) results = search_data(query) return JsonResponse({"status": "success", "data": results}) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["GET"]) def fuzzy_search(request): """模糊搜索""" try: keyword = request.GET.get('keyword', '') if not keyword: return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400) results = search_by_any_field(keyword) return JsonResponse({"status": "success", "data": results}) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["GET"]) def get_all_data(request): """获取所有数据""" try: results = search_all() return JsonResponse({"status": "success", "data": results}) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["DELETE"]) @csrf_exempt def delete_data(request, doc_id): """删除数据""" try: success = delete_by_id(doc_id) if success: return JsonResponse({"status": "success", "message": "数据删除成功"}) else: return JsonResponse({"status": "error", "message": "数据删除失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["PUT"]) @csrf_exempt def update_data(request, doc_id): """更新数据""" try: data = json.loads(request.body.decode('utf-8')) success = update_by_id(doc_id, data) if success: return JsonResponse({"status": "success", "message": "数据更新成功"}) else: return JsonResponse({"status": "error", "message": "数据更新失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["GET"]) def get_data(request, doc_id): """获取单个数据""" try: result = get_by_id(doc_id) if result: return JsonResponse({"status": "success", "data": result}) else: return JsonResponse({"status": "error", "message": "数据不存在"}, status=404) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["POST"]) @csrf_exempt def add_user(request): """添加用户""" try: data = json.loads(request.body.decode('utf-8')) success = write_user_data(data) if success: return JsonResponse({"status": "success", "message": "用户添加成功"}) else: return JsonResponse({"status": "error", "message": "用户添加失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["GET"]) def get_users(request): """获取所有用户""" try: users = get_all_users() return JsonResponse({"status": "success", "data": users}) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["DELETE"]) @csrf_exempt def delete_user(request, username): """删除用户""" try: success = delete_user_by_username(username) if success: return JsonResponse({"status": "success", "message": "用户删除成功"}) else: return JsonResponse({"status": "error", "message": "用户删除失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) @require_http_methods(["PUT"]) @csrf_exempt def update_user(request, username): """更新用户权限""" try: data = json.loads(request.body.decode('utf-8')) new_permission = data.get('permission', 1) success = update_user_permission(username, new_permission) if success: return JsonResponse({"status": "success", "message": "用户权限更新成功"}) else: return JsonResponse({"status": "error", "message": "用户权限更新失败"}, status=500) except Exception as e: return JsonResponse({"status": "error", "message": str(e)}, status=500)