mirror of
				https://github.com/Kakune55/ComiPy.git
				synced 2025-11-02 21:44:41 +08:00 
			
		
		
		
	使用蓝图重构项目结构
This commit is contained in:
		
							
								
								
									
										105
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								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/<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("/")
 | 
			
		||||
 | 
			
		||||
app.register_blueprint(api_Img_bp)
 | 
			
		||||
app.register_blueprint(page_bp)
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    appinit()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								web/api_Img.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								web/api_Img.py
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										75
									
								
								web/page.py
									
									
									
									
									
										Normal 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("/")
 | 
			
		||||
		Reference in New Issue
	
	Block a user