基于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')
相关推荐
不错就是对几秒前
mmdetection - Linux环境搭建
图像处理·人工智能·python·深度学习·计算机视觉
背心2块钱包邮18 分钟前
第5节——定积分与面积
python·深度学习·机器学习·matplotlib
电饭叔18 分钟前
如何将提前的奇数进行相加
python
测试199823 分钟前
如何学习自动化测试?
自动化测试·软件测试·python·学习·测试工具·职场和发展·测试用例
谷粒.26 分钟前
DevOps流水线中的质量门禁设计:从理论到实践的全景解析
运维·开发语言·网络·人工智能·python·devops
GOTXX27 分钟前
性能与可靠双突破:openEuler 服务器场景评测报告
运维·服务器·网络·人工智能·后端·python
U盘失踪了27 分钟前
Django Bootstrap 下载到本地使用,避免 CDN 超时
python·django·bootstrap
weixin_4215850129 分钟前
vxm.networks.Unet
python·深度学习·.net
秋邱31 分钟前
AR 技术团队搭建与规模化接单:从个人到团队的营收跃迁
前端·人工智能·后端·python·html·restful
适应规律34 分钟前
贝叶斯优化完整流程详解
python