使用蓝图重构项目结构

This commit is contained in:
Kakune55 2024-04-15 11:27:43 +08:00
parent b950ae8b76
commit 372435d224
3 changed files with 108 additions and 98 deletions

105
main.py
View File

@ -1,115 +1,24 @@
import configparser, gc import configparser
import db, file import db, file
from flask import * from flask import *
from web.api_Img import api_Img_bp
from web.page import page_bp
app = Flask(__name__)
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read("./conf/app.ini") config.read("./conf/app.ini")
app = Flask(__name__)
def appinit(): def appinit():
file.init() file.init()
db.init() db.init()
file.auotLoadFile() file.auotLoadFile()
@app.route("/", methods=["GET", "POST"]) app.register_blueprint(api_Img_bp)
def login(): # 登录页面 app.register_blueprint(page_bp)
if request.method == "GET":
if request.cookies.get("islogin") is not None:
return redirect("/overview/1")
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/1"))
resp.set_cookie("islogin", "True")
return resp
else:
return redirect("/")
@app.route("/overview/<page>")
def overview(page): # 概览
page = int(page)
if request.cookies.get("islogin") is None:
return redirect("/")
metaDataList = db.getMetadata((page - 1) * 20, page * 20)
if page <= 3:
lastPageList = range(1,page)
else:
lastPageList = range(page-3,page)
nextPageList = range(page+1,page+4)
return render_template("overview.html",list=metaDataList,lastPageList=lastPageList,pagenow=page,nextPageList=nextPageList)
# @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/<bookid>/<index>")
def img(bookid, index): # 图片接口
if request.cookies.get("islogin") is None:
return abort(403)
if db.searchByid(bookid) == "":
return abort(404)
# 设置响应类型为图片
data, filename = file.raedZip(bookid,index)
if isinstance(data, str):
abort(404)
if request.args.get("mini") == "yes":
data = file.thumbnail(data)
else:
data = file.imageToWebP(data)
response = make_response(data) #读取文件
del data
response.headers.set('Content-Type', 'image/Webp')
response.headers.set('Content-Disposition', 'inline', filename=filename)
gc.collect()
return response
@app.route("/book/<bookid>")
def book(bookid): # 接口
if request.cookies.get("islogin") is None:
return abort(403)
data = db.searchByid(bookid)
if data == "":
return abort(404)
return render_template("view.html",id = bookid , index = range(1,data[0][3]))
@app.route("/view/<bookid>")
def view(bookid): # 接口
if request.cookies.get("islogin") is None:
return abort(403)
return bookid
@app.route('/upload', methods=["GET", "POST"]) #文件上传
def upload_file():
if request.method == "GET":
return render_template("upload.html")
uploaded_file = request.files.getlist('files[]') # 获取上传的文件列表
for fileitem in uploaded_file:
if fileitem.filename != '':
fileitem.save(config.get("file", "inputdir") + "/" + fileitem.filename)
file.auotLoadFile()
return redirect("/")
if __name__ == "__main__": if __name__ == "__main__":
appinit() appinit()

26
web/api_Img.py Normal file
View File

@ -0,0 +1,26 @@
from flask import *
from flask import Blueprint
import db, file
api_Img_bp = Blueprint("api_Img_bp", __name__)
@api_Img_bp.route("/api/img/<bookid>/<index>")
def img(bookid, index): # 图片接口
if request.cookies.get("islogin") is None:
return abort(403)
if db.searchByid(bookid) == "":
return abort(404)
# 设置响应类型为图片
data, filename = file.raedZip(bookid, index)
if isinstance(data, str):
abort(404)
if request.args.get("mini") == "yes":
data = file.thumbnail(data)
else:
data = file.imageToWebP(data)
response = make_response(data) # 读取文件
del data
response.headers.set("Content-Type", "image/Webp")
response.headers.set("Content-Disposition", "inline", filename=filename)
return response

75
web/page.py Normal file
View File

@ -0,0 +1,75 @@
from flask import *
from flask import Blueprint
import configparser
import db, file
page_bp = Blueprint("page_bp", __name__)
config = configparser.ConfigParser()
config.read("./conf/app.ini")
@page_bp.route("/overview/<page>")
def overview(page): # 概览
page = int(page)
if request.cookies.get("islogin") is None:
return redirect("/")
metaDataList = db.getMetadata((page - 1) * 20, page * 20)
if page <= 3:
lastPageList = range(1, page)
else:
lastPageList = range(page - 3, page)
nextPageList = range(page + 1, page + 4)
return render_template(
"overview.html",
list=metaDataList,
lastPageList=lastPageList,
pagenow=page,
nextPageList=nextPageList,
)
@page_bp.route("/book/<bookid>")
def book(bookid): # 接口
if request.cookies.get("islogin") is None:
return abort(403)
data = db.searchByid(bookid)
if data == "":
return abort(404)
return render_template("view.html", id=bookid, index=range(1, data[0][3]))
@page_bp.route("/view/<bookid>")
def view(bookid): # 接口
if request.cookies.get("islogin") is None:
return abort(403)
return bookid
@page_bp.route("/upload", methods=["GET", "POST"]) # 文件上传
def upload_file():
if request.method == "GET":
return render_template("upload.html")
uploaded_file = request.files.getlist("files[]") # 获取上传的文件列表
for fileitem in uploaded_file:
if fileitem.filename != "":
fileitem.save(config.get("file", "inputdir") + "/" + fileitem.filename)
file.auotLoadFile()
return redirect("/")
@page_bp.route("/", methods=["GET", "POST"])
def login(): # 登录页面
if request.method == "GET":
if request.cookies.get("islogin") is not None:
return redirect("/overview/1")
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/1"))
resp.set_cookie("islogin", "True")
return resp
else:
return redirect("/")