from flask import Flask, jsonify, request from flask_cors import CORS from datetime import datetime app = Flask(__name__) CORS(app) # 允许跨域请求 # 模拟数据库中的模板数据 MOCK_TEMPLATES = [ { "id": "1", "name": "后端开发工程师", "description": "专业的后端开发工程师模板", "category": "软件开发", "industry": "互联网", "profession": "开发工程师", "sub_category": "后端开发", "system_prompt": "你是一位专业的后端开发工程师..." }, { "id": "2", "name": "前端开发工程师", "description": "专业的前端开发工程师模板", "category": "软件开发", "industry": "互联网", "profession": "开发工程师", "sub_category": "前端开发", "system_prompt": "你是一位专业的前端开发工程师..." } ] # 身份验证装饰器 def require_auth(f): from functools import wraps @wraps(f) def decorated(*args, **kwargs): auth_header = request.headers.get('Authorization') if not auth_header or not auth_header.startswith('Bearer '): return jsonify({'error': 'No authorization token provided'}), 401 # 这里简单验证token,实际应该更严格 token = auth_header.split(' ')[1] if token != 'test_token_123': return jsonify({'error': 'Invalid token'}), 401 return f(*args, **kwargs) return decorated # 获取模板列表接口 @app.route('/api/v1/templates', methods=['GET']) @require_auth def get_templates(): # 获取查询参数 page = int(request.args.get('page', 1)) size = int(request.args.get('size', 10)) category = request.args.get('category') industry = request.args.get('industry') profession = request.args.get('profession') # 过滤模板 filtered_templates = MOCK_TEMPLATES if category: filtered_templates = [t for t in filtered_templates if t['category'] == category] if industry: filtered_templates = [t for t in filtered_templates if t['industry'] == industry] if profession: filtered_templates = [t for t in filtered_templates if t['profession'] == profession] # 计算分页 start = (page - 1) * size end = start + size paginated_templates = filtered_templates[start:end] return jsonify({ 'code': 200, 'data': { 'total': len(filtered_templates), 'pages': (len(filtered_templates) + size - 1) // size, 'current_page': page, 'templates': paginated_templates } }) # 获取单个模板接口 @app.route('/api/v1/templates/', methods=['GET']) @require_auth def get_template(template_id): template = next((t for t in MOCK_TEMPLATES if t['id'] == template_id), None) if not template: return jsonify({'error': 'Template not found'}), 404 return jsonify({ 'code': 200, 'data': template }) # 创建模板接口 @app.route('/api/v1/templates', methods=['POST']) @require_auth def create_template(): data = request.get_json() # 验证必要字段 required_fields = ['name', 'description', 'category', 'industry', 'profession'] for field in required_fields: if field not in data: return jsonify({'error': f'Missing required field: {field}'}), 400 # 创建新模板 new_template = { 'id': str(len(MOCK_TEMPLATES) + 1), **data, 'created_at': datetime.now().isoformat() } MOCK_TEMPLATES.append(new_template) return jsonify({ 'code': 200, 'data': { 'id': new_template['id'], 'message': 'Template created successfully' } }) # 更新模板接口 @app.route('/api/v1/templates/', methods=['PUT']) @require_auth def update_template(template_id): template = next((t for t in MOCK_TEMPLATES if t['id'] == template_id), None) if not template: return jsonify({'error': 'Template not found'}), 404 data = request.get_json() template.update(data) return jsonify({ 'code': 200, 'data': { 'message': 'Template updated successfully' } }) # 删除模板接口 @app.route('/api/v1/templates/', methods=['DELETE']) @require_auth def delete_template(template_id): template_index = next((i for i, t in enumerate(MOCK_TEMPLATES) if t['id'] == template_id), None) if template_index is None: return jsonify({'error': 'Template not found'}), 404 MOCK_TEMPLATES.pop(template_index) return jsonify({ 'code': 200, 'data': { 'message': 'Template deleted successfully' } }) # 模糊搜索提示词模板接口 @app.route('/api/v1/templates/search', methods=['GET']) @require_auth def search_templates(): """模糊搜索提示词模板""" # 获取搜索参数 keyword = request.args.get('keyword', '').strip() page = int(request.args.get('page', 1)) size = int(request.args.get('size', 10)) # 如果没有关键词,返回空结果 if not keyword: return jsonify({ 'code': 200, 'data': { 'total': 0, 'pages': 0, 'current_page': page, 'templates': [] } }) # 执行模糊搜索 # 搜索范围:名称、描述、分类、行业、职业、子分类、系统提示词 search_results = [] for template in MOCK_TEMPLATES: # 在各个字段中搜索关键词 if any(keyword.lower() in str(value).lower() for value in [ template.get('name', ''), template.get('description', ''), template.get('category', ''), template.get('industry', ''), template.get('profession', ''), template.get('sub_category', ''), template.get('system_prompt', '') ]): # 添加匹配度信息 match_score = sum( str(value).lower().count(keyword.lower()) for value in [ template.get('name', ''), template.get('description', ''), template.get('category', ''), template.get('industry', ''), template.get('profession', ''), template.get('sub_category', ''), template.get('system_prompt', '') ] ) search_results.append({ **template, '_match_score': match_score }) # 按匹配度排序 search_results.sort(key=lambda x: x['_match_score'], reverse=True) # 移除匹配度信息 search_results = [{k: v for k, v in t.items() if k != '_match_score'} for t in search_results] # 计算分页 total = len(search_results) total_pages = (total + size - 1) // size start = (page - 1) * size end = start + size paginated_results = search_results[start:end] # 返回结果 return jsonify({ 'code': 200, 'data': { 'total': total, 'pages': total_pages, 'current_page': page, 'keyword': keyword, 'templates': paginated_results } }) if __name__ == '__main__': app.run(debug=True, port=5000)