Răsfoiți Sursa

feat: 优化Flask-app的文件结构

SongZihuan 3 ani în urmă
părinte
comite
99e1a84bf0

+ 17 - 1
app/__init__.py

@@ -1 +1,17 @@
-from . import rank_views as rank
+from flask import Flask
+
+from tool.type_ import *
+from sql.db import DB
+
+from . import views as views
+
+app: Optional[Flask] = None
+
+
+def creat_web(db: DB) -> Flask:
+    global app
+    if app is not None:
+        return app
+    app = Flask(__name__)
+    views.register(app, db)
+    return app

+ 29 - 0
app/hello_views.py

@@ -0,0 +1,29 @@
+from conf import Config
+from flask import render_template, Blueprint, Flask
+from .rank_web import RankWebsite
+from tool.type_ import Optional
+
+hello_web = Blueprint("hello_web", __name__)
+hello_app: Optional[Flask] = None
+
+
+@hello_web.route('/')
+def index():
+    return render_template("hello_web/index.html", loc=Config.base_location)
+
+
+@hello_web.route('/start')
+def start():
+    return render_template("hello_web/start.html", loc=Config.base_location)
+
+
+@hello_web.app_errorhandler(404)
+def error_404(e):
+    return render_template("hello_web/error.html", error_code="404", error_info=e), 404
+
+
+def creat_hello_website(app: Flask):
+    global hello_app
+    if hello_app is not None:
+        return hello_app
+    app.register_blueprint(hello_web)

+ 10 - 25
app/rank_views.py

@@ -4,45 +4,30 @@ from .rank_web import RankWebsite
 from sql.db import DB
 from tool.type_ import Optional
 
-main = Blueprint("main", __name__)
+rank_web = Blueprint("rank_web", __name__)
 rank_website: Optional[RankWebsite] = None
 rank_app: Optional[Flask] = None
 
 
-@main.route('/')
-def index():
-    return render_template("index.html", loc=Config.base_location)
-
-
-@main.route('/start')
-def start():
-    return render_template("start.html", loc=Config.base_location)
-
-
-@main.route('/rank_up')
+@rank_web.route('/up')
 def rank_up():
     global rank_website
     data = rank_website.get_rank("DESC")
-    return render_template("ranking.html", rank_info=data, ranking_name="高分榜")
+    return render_template("rank_web/ranking.html", rank_info=data, ranking_name="高分榜")
 
 
-@main.route('/rank_down')
+@rank_web.route('/down')
 def rank_down():
     global rank_website
     data = rank_website.get_rank("ASC")
-    return render_template("ranking.html", rank_info=data, ranking_name="警示榜")
-
-
-@main.app_errorhandler(404)
-def error_404(e):
-    return render_template("error.html", error_code="404", error_info=e), 404
+    return render_template("rank_web/ranking.html", rank_info=data, ranking_name="警示榜")
 
 
-def creat_ranking_website(db: DB):
+def creat_ranking_website(app: Flask, db: DB):
     global rank_website, rank_app
     if rank_website is not None:
-        return rank_website, rank_website.app
-    rank_app = Flask(__name__)
-    rank_app.register_blueprint(main)
+        return rank_website
+    rank_app = app
+    rank_app.register_blueprint(rank_web, url_prefix="/rank")
     rank_website = RankWebsite(db, rank_app)
-    return rank_website, rank_app
+    return rank_website

+ 0 - 9
app/rank_web.py

@@ -23,12 +23,3 @@ class RankWebsite:
             i = cur.fetchone()
             res.append((f"{index + 1}", i[1], i[0][:Config.tk_show_uid_len], str(i[3]), str(i[2])))
         return res
-
-    def run(self,
-            host: Optional[str] = None,
-            port: Optional[int] = None,
-            debug: Optional[bool] = True,
-            load_dotenv: bool = True,
-            **options,
-            ):
-        self.app.run(host, port, debug, load_dotenv, **options)

+ 3 - 3
app/templates/base.html

@@ -40,9 +40,9 @@
             <img class="logo" src=" {{ url_for('static', filename='images/HGSSystem.png') }} " alt="HGSSystem Logo">
         </section>
         <ul class="top-nav">
-            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('main.start') }}"> 首页 </a></li>
-            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('main.rank_up') }}"> 高分榜 </a></li>
-            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('main.rank_down') }}"> 警告榜 </a></li>
+            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('hello_web.start') }}"> 首页 </a></li>
+            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('rank_web.rank_up') }}"> 高分榜 </a></li>
+            <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('rank_web.rank_down') }}"> 警告榜 </a></li>
             <li class="top-nav-item"><a class="top-nav-item"> 积分商城 </a></li>
         </ul>
     </nav>

+ 0 - 0
app/templates/error.html → app/templates/hello_web/error.html


+ 1 - 1
app/templates/index.html → app/templates/hello_web/index.html

@@ -15,7 +15,7 @@
     <section id="base">
         <h1 id="title-1"> 欢迎,HGSSystem在线系统 </h1>
         <h2 id="title-2"> {{ loc }} 站 </h2>
-        <form method="get" action="{{ url_for('main.start') }}">
+        <form method="get" action="{{ url_for('hello_web.start') }}">
             <input id="btn" type="submit" value="开始">
         </form>
     </section>

+ 0 - 0
app/templates/start.html → app/templates/hello_web/start.html


+ 0 - 0
app/templates/rank_macro.html → app/templates/rank_web/rank_macro.html


+ 1 - 1
app/templates/ranking.html → app/templates/rank_web/ranking.html

@@ -1,5 +1,5 @@
 {% extends "base.html" %}
-{% import "rank_macro.html" as rank %}
+{% import "rank_web/rank_macro.html" as rank %}
 
 {% block style %}
     {{ super() }}

+ 10 - 0
app/views.py

@@ -0,0 +1,10 @@
+from flask import Flask
+from .hello_views import creat_hello_website
+from .rank_views import creat_ranking_website
+
+from sql.db import DB
+
+
+def register(app: Flask, db: DB):
+    creat_hello_website(app)
+    creat_ranking_website(app, db)

+ 4 - 3
main.py

@@ -74,13 +74,14 @@ def main():
         station.mainloop()
     elif program_name == "ranking_website":
         try:
-            from app import rank as rank_web
+            from app import creat_web
+            from app.views import register
         except ImportError:
             can_not_load("在线排行榜服务")
             sys.exit(1)
 
-        web, app = rank_web.creat_ranking_website(mysql)
-        web.run()
+        app = creat_web(mysql)
+        app.run()
     else:
         can_not_load(program_name)
         sys.exit(1)

+ 1 - 1
tk_ui/ranking.py

@@ -244,7 +244,7 @@ class RankingStation(RankingStationBase):
         self.rank_title_var = tk.StringVar()
         self.rank_count = 7  # 一页显示的行数
         self.rank_label = [tk.Label(self.rank_frame) for _ in range(self.rank_count)]
-        self.rank_y_height: List[Tuple[float, float]] = []  # rank 标签的y坐标信息
+        self.rank_y_height: List[Tuple[float, float]] = []  # rank_web 标签的y坐标信息
         self.rank_var = [tk.StringVar() for _ in range(self.rank_count)]
         self.rank_btn = [tk.Button(self.rank_frame) for _ in range(3)]  # prev, auto, next