基本项目结构完成

This commit is contained in:
Kakune55 2024-04-09 10:27:37 +08:00
parent c4c0291455
commit b36e50cbc5
5 changed files with 199 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
__pycache__
data
input
test.py

16
conf/app.ini Normal file
View File

@ -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

77
db.py Normal file
View File

@ -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

20
file.py Normal file
View File

@ -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)

82
main.py Normal file
View File

@ -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/<bookid>")
def book(bookid): # 接口
if request.cookies.get("islogin") is None:
return abort(403)
return bookid
@app.route("/view/<bookid>")
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"),
)