基于Python、neo4j的音乐知识图谱可视化系统(提供源码)

python 复制代码
import os

from flask import Flask, request
from flask import jsonify
from flask_cors import CORS

from db_utils import DbUtil
from jwt_util import decode, encode
from model_search import neo4j_db

app = Flask(__name__)
CORS(app)  # 允许所有域名访问
neo4j_db_handle = neo4j_db()
user_id = None

# 获取项目目录
APP_PATH = os.path.dirname(__file__)
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{APP_PATH}/database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 初始化数据库
DbUtil.init_app(app)


@app.before_request
def before():
    url = request.path  # 当前请求的URL
    print('url:' + url)
    pass_url = ["/", "/api/login", "/api/sign_in"]
    if url.startswith("/static") or url in pass_url:
        pass
    else:
        token = request.headers.get('Token')
        if not token:
            return jsonify({
                "code": 403,
                "msg": "您还未登录,请先登录"
            })
        else:
            global user_id
            user_id = decode(token)['user_id']


@app.route('/api/login', methods=['POST'])
def login():
    global user_id
    user_id = 1
    params = request.get_json()
    handler = DbUtil()
    user = handler.authentication(params)
    if user:
        token = encode(user.id)
        return jsonify({
            "code": 200,
            "data": token
        })
    else:
        return jsonify({
            "code": 403,
            "msg": "用户名或密码错误"
        })


# 查询用户信息
@app.route('/api/userinfo', methods=['GET', 'POST'])
def userinfo():
    handler = DbUtil()
    global user_id
    result = handler.find_user(user_id)
    return jsonify({
        "code": 200,
        "data": result
    })


@app.route('/api/sign_in', methods=['POST'])
def sign_in():
    """
    注册
    """
    data = request.get_json()
    handler = DbUtil()
    return handler.add_user(data)


@app.route('/search_name_kg', methods=['GET', 'POST'])
def search_name():
    entity = request.json.get('name')
    json_data = neo4j_db_handle.get_kg_new(entity)
    return jsonify({
        "code": 200,
        "data": json_data
    })


@app.route('/api/find_list', methods=['POST'])
def find_list():
    # 获取前端传递的参数
    current = int(request.json.get('pageNum', 1))
    limit = int(request.json.get('pageSize', 10))
    name_query = request.json.get('name', '')
    json_data = neo4j_db_handle.find_list(current, limit, name_query)
    return jsonify({
        "code": 200,
        "data": json_data
    })


@app.route('/create_node', methods=['POST'])
def create_node():
    data = request.json
    node = neo4j_db_handle.create_node(data.get("type"), data.get("name"))
    return jsonify({
        "code": 200,
        "data": node
    })


@app.route('/update_node', methods=['POST'])
def update_node():
    data = request.json
    node = neo4j_db_handle.update_node(data.get("type"), data.get("id"), data.get("name"))
    return jsonify({
        "code": 200,
        "data": node
    })


@app.route('/delete_node', methods=['POST'])
def delete_node():
    data = request.json
    node = neo4j_db_handle.delete_node(data.get("type"), data.get("id"))
    return jsonify({
        "code": 200,
        "data": node
    })


if __name__ == '__main__':
    app.run(debug=True, port='5000', host='127.0.0.1')
相关推荐
昭昭日月明9 小时前
RAGFlow 入门,不用从零造轮子
python·ai编程
莓有烦恼吖10 小时前
Vibe Coding 的一些思考
python
小白学大数据10 小时前
超简单:用 Python 让 Excel 飞起来:用 openpyxl 把重复报表整理交给脚本
开发语言·数据库·python·excel
爱丶不疚10 小时前
写给前端工程师的现代 Python 工程化最佳实践:从 pnpm 到 uv,从 CommonJS 到 src-layout
javascript·python·typescript
2601_9622972511 小时前
C# vs Java vs Python:YOLO工业部署性能对比实战
java·python·c·工业视觉·性能对比
CTA终结者11 小时前
示例、拆解和练习,要连成一条量化补课线
人工智能·python
lolijiaqi1511 小时前
一线观察:长期体验后发现的医疗器械 CDMO 底层现象
大数据·python
spencer_tseng11 小时前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
梦想不只是梦与想12 小时前
Python Web 框架:FastAPI
python·fastapi·web框架
lincats12 小时前
大白话讲解Addy Osmani 的循环工程Loop Engineering工作流
人工智能·驱动开发·架构·prompt·状态模式·知识图谱