diff --git a/README.md b/README.md index 5d492c9..0fcabb8 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,19 @@ flask ## 用户系统 1. 用户使用外链访问后,页面显示剩余次数,到期时间倒计时 2. 用户每成功登录一次,剩余次数-1 + +## 数据库设计 +1. 网盘驱动表 + 1. 网盘服务商名称-唯一 + 2. 环境变量配置-JSON格式 + 3. 备注 +2. 用户网盘表 + 1. 从#1表里面去重获取 + 2. 登录配置-JSON格式 + 3. 备注 +3. 外链表 + 1. 网盘名称: 从#2里获取已有网盘 + 2. 总额度: 数字 + 3. 已使用额度: 数字 + 4. 外链编码: 随机uuid-不重复 + 5. 备注 \ No newline at end of file diff --git a/database.db b/database.db new file mode 100644 index 0000000..8e1cbc9 Binary files /dev/null and b/database.db differ diff --git a/main.py b/main.py index 4b9a1b6..f09b6aa 100644 --- a/main.py +++ b/main.py @@ -1,33 +1,52 @@ import os import requests import sqlite3 +import json from flask import g from flask import Flask, render_template, request, redirect, url_for, session,make_response,send_from_directory,jsonify from flask.views import MethodView from werkzeug.routing import BaseConverter from utils.login import login_quark from utils.tools import get_cnb_weburl +from utils.detebase import CloudDriveDatabase +from functools import wraps # 导入 wraps + + +app = Flask(__name__) +#app = Flask(__name__,template_folder='templates') #修改模板目录 +app.jinja_env.auto_reload = True # 数据库配置 DATABASE = 'database.db' def get_db(): + # 从 Flask 的全局对象 g 中获取数据库连接 + # getattr 函数用于获取对象的属性,如果属性不存在则返回第三个参数作为默认值 + # 这里尝试获取 g._database 属性,如果不存在则返回 None + # 这种模式确保在一个请求中只创建一个数据库连接 db = getattr(g, '_database', None) if db is None: - db = g._database = sqlite3.connect(DATABASE) + db = g._database = CloudDriveDatabase(DATABASE) db.row_factory = sqlite3.Row return db + +# 定义数据库注入装饰器 +def inject_db(f): + @wraps(f) + def decorated_function(*args, **kwargs): + db = get_db() + # 将 db 作为第一个参数传递 + return f(db, *args, **kwargs) + return decorated_function + + @app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) if db is not None: db.close() -app = Flask(__name__) -#app = Flask(__name__,template_folder='templates') #修改模板目录 -app.jinja_env.auto_reload = True - exlink_info = { "exlink_id":"1", @@ -96,16 +115,96 @@ def qrlink(id): @app.route('/admin/') def admin(): - return render_template('admin.html') + db = get_db() + providers = db.get_all_drive_providers() + alluser_drives = db.get_all_user_drives() + print(alluser_drives) + return render_template('admin.html',providers=providers,alluser_drives=alluser_drives) + + +@app.route('/admin/drive_provider/',methods=['POST']) +def drive_provider(metfunc): + db = get_db() + data = {"status":False} + if metfunc == "get": + + alldrive= db.get_all_drive_providers() + if len(alldrive) > 0: + data["status"] = True + data['data'] = alldrive + # 使用jsonify确保中文正确显示 + elif metfunc == "add": + """ + json样板 + body -- { + "config_vars": { + "data": { + "client_id": "532", + "kps_wg": "", + "request_id": "", + "sign_wg": "", + "token": "", + "v": "1.2", + "vcode": "" + }, + "kps_wg": "", + "redirect_uri": "https://uop.quark.cn/cas/ajax/loginWithKpsAndQrcodeToken", + "sign_wg": "" + }, + "provider_name": "夸克网盘", + "remarks": "夸克网盘" + } + Return: status + """ + + body = request.get_json() + print(data) + status = db.add_drive_provider(body.get("provider_name","测试网盘"),body.get("config_vars"),body.get("remarks","测试网盘")) + + if status: + data["status"] = True + data["data"] = body + return data + +@app.route('/admin/user_drive/',methods=['POST']) +def user_drive(metfunc): + db = get_db() + data = {"status":False} + if metfunc == "get": + pass + elif metfunc == "add": + body = request.get_json() + print(body) + status = db.add_user_drive(body.get("provider_name","测试网盘"),body.get("config_vars"),body.get("remarks","测试网盘")) + if status: + data["status"] = True + data["data"] = body + return data class Exlink(MethodView): def get(self): db = get_db() - cursor = db.cursor() - cursor.execute('SELECT * FROM exlinks') - exlinks = cursor.fetchall() - return jsonify([dict(row) for row in exlinks]) + db.add_drive_provider( + "阿里网盘", + { + "sign_wg": "", + "kps_wg": "", + "redirect_uri": "https://uop.quark.cn/cas/ajax/loginWithKpsAndQrcodeToken", + "data":{ + 'client_id': '532', + 'v': '1.2', + 'request_id': "", + 'sign_wg': "", + 'kps_wg': "", + 'vcode': "", + 'token': "" + } + }, + "阿里网盘API配置" + ) + return jsonify({"status": True, "message": "success"}) + def post(self): data = request.json @@ -126,11 +225,15 @@ class Exlink(MethodView): app.add_url_rule('/admin/exlink', view_func=Exlink.as_view('exlink')) + + if __name__ == "__main__": + weburl = get_cnb_weburl(5000) print("Run_url:",weburl) app.config.from_pyfile("config.py") app.run(host="0.0.0.0") + diff --git a/templates/admin.html b/templates/admin.html index 21f6718..1e12c21 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -131,6 +131,18 @@ + + {% for user_drive in alluser_drives %} + {{user_drive.provider_name}} + {{user_drive.provider_name}} + 正常 + 1.5TB / 2TB + + + + + {% endfor %} + @@ -201,23 +213,30 @@
- - - + {% set provider_options = providers %} + {% for provider in provider_options %} + + {% endfor %}
- - -
-
- - -
-
- - + +
+
+ +
+ +
+
+
+
请输入有效的JSON格式配置信息
+
0 行 | 0 字符
+
+
@@ -230,6 +249,43 @@ + + +