diff --git a/main.py b/main.py index 7b01f3c..478474b 100644 --- a/main.py +++ b/main.py @@ -1,115 +1,24 @@ -import configparser, gc +import configparser import db, file from flask import * +from web.api_Img import api_Img_bp +from web.page import page_bp + +app = Flask(__name__) 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/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/") -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//") -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/") -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/") -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("/") - +app.register_blueprint(api_Img_bp) +app.register_blueprint(page_bp) if __name__ == "__main__": appinit() diff --git a/web/api_Img.py b/web/api_Img.py new file mode 100644 index 0000000..d7f8910 --- /dev/null +++ b/web/api_Img.py @@ -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//") +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 diff --git a/web/page.py b/web/page.py new file mode 100644 index 0000000..7aaf5d3 --- /dev/null +++ b/web/page.py @@ -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/") +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/") +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/") +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("/")