diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f69083 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__ +data +input +test.py diff --git a/conf/app.ini b/conf/app.ini new file mode 100644 index 0000000..13defc9 --- /dev/null +++ b/conf/app.ini @@ -0,0 +1,16 @@ +[server] +port=8080 +debug=True +host=0.0.0.0 + +[user] +username=admin +password=admin + +[database] +path=./data/metadata.db + +[file] +inputdir=./input +storedir=./data/file +tmpdir=./data/tmp \ No newline at end of file diff --git a/db.py b/db.py new file mode 100644 index 0000000..cdef37c --- /dev/null +++ b/db.py @@ -0,0 +1,77 @@ +import sqlite3, configparser, shortuuid + +config = configparser.ConfigParser() +config.read("./conf/app.ini") + + +def getConn(): + return sqlite3.connect(config.get("database", "path")) + + +def init(): + conn = getConn() + c = conn.cursor() + c.execute( + """ + CREATE TABLE IF NOT EXISTS Metadata ( + num INTEGER PRIMARY KEY AUTOINCREMENT, + id TEXT NOT NULL, + filename TEXT NOT NULL + ); + """ + ) + conn.commit() + conn.close() + + +# 查找文件信息 +def searchByid(id: str): + conn = getConn() + c = conn.cursor() + cursor = c.execute("SELECT * FROM Metadata WHERE id = ?", (id,)) + out = [] + for row in cursor: + out.append(row) + conn.close() + return out + +# 查找文件信息 +def searchByid(filename: str): + conn = getConn() + c = conn.cursor() + cursor = c.execute("SELECT * FROM Metadata WHERE filename = ?", (filename,)) + out = [] + for row in cursor: + out.append(row) + conn.close() + return out + + +# 在数据库中添加一个新的文件记录 +def newFile(filename: str): + suuid = shortuuid.random(8) + conn = getConn() + c = conn.cursor() + c.execute( + """ + INSERT INTO Metadata + (id, filename) + VALUES + (?, ?); + """, + (suuid, filename), + ) + conn.commit() + conn.close() + return suuid + +# 获取文件元数据 +def getMetadata(form:int,num:int): + conn = getConn() + c = conn.cursor() + cursor = c.execute("SELECT * FROM Metadata ORDER BY num desc LIMIT ?, ?",(form, num)) + out = [] + for row in cursor: + out.append(list(row)) + conn.close() + return out \ No newline at end of file diff --git a/file.py b/file.py new file mode 100644 index 0000000..a7a9091 --- /dev/null +++ b/file.py @@ -0,0 +1,20 @@ +import shutil, os ,configparser +import db + +config = configparser.ConfigParser() +config.read("./conf/app.ini") + +def init(): + try: + os.makedirs(config.get("file", "inputdir")) + os.makedirs(config.get("file", "storedir")) + os.makedirs(config.get("file", "tmpdir")) + except: + pass + +def auotLoadFile(): + fileList = os.listdir(config.get("file", "inputdir")) + for item in fileList: + db.newFile(item) + shutil.move(config.get("file", "inputdir")+"/"+item, config.get("file", "storedir")+"/"+item) + print("已添加 "+item) diff --git a/main.py b/main.py new file mode 100644 index 0000000..79e860d --- /dev/null +++ b/main.py @@ -0,0 +1,82 @@ +import configparser, os +import db, file +from flask import * + + +config = configparser.ConfigParser() +config.read("./conf/app.ini") + + +app = Flask(__name__) + + +def appinit(): + file.init() + db.init() + file.auotLoadFile() + + +@app.route("/", methods=["GET", "POST"]) +def login(): # 登录页面 + if request.method == "GET": + if request.cookies.get("islogin") is not None: + return redirect("/overview") + return render_template("login.html") + elif request.method == "POST": + if request.form["username"] == config.get("user", "username") and request.form[ + "password" + ] == config.get("user", "password"): + resp = make_response(redirect("/overview")) + resp.set_cookie("islogin", "True") + return resp + else: + return redirect("/") + + +@app.route("/overview") +def overview(): # 概览 + if request.cookies.get("islogin") is None: + return redirect("/") + return config.get("server", "port") + + +@app.route("/api/info") +def api(): # 接口 + if request.cookies.get("islogin") is None: + return abort(403) + func = request.args.get("func") + if func == "bookname" and request.args.get("page") is not None: + page = int(request.args.get("page")) + return db.getMetadata((page - 1) * 20, page * 20) + + return abort(400) + + +@app.route("/api/img") +def img(): # 图片接口 + if request.cookies.get("islogin") is None: + return abort(403) + return "Hello World" + + +@app.route("/book/") +def book(bookid): # 接口 + if request.cookies.get("islogin") is None: + return abort(403) + return bookid + + +@app.route("/view/") +def view(bookid): # 接口 + if request.cookies.get("islogin") is None: + return abort(403) + return bookid + + +if __name__ == "__main__": + appinit() + app.run( + debug=config.get("server", "debug"), + host=config.get("server", "host"), + port=config.get("server", "port"), + )