Răsfoiți Sursa

feat: 调整程序的进入方式

SongZihuan 3 ani în urmă
părinte
comite
6cf945016a
12 a modificat fișierele cu 157 adăugiri și 145 ștergeri
  1. 0 1
      app/hello_views.py
  2. 6 6
      app/rank_views.py
  3. 5 3
      app/rank_web.py
  4. 14 6
      app/static/styles/index.css
  5. 0 62
      app/static/styles/nav.css
  6. 12 13
      app/templates/base.html
  7. 2 2
      conf/__init__.py
  8. 2 2
      conf/aliyun.py
  9. 76 40
      conf/args.py
  10. 5 4
      conf/sql.py
  11. 17 1
      conf/sys_default.py
  12. 18 5
      main.py

+ 0 - 1
app/hello_views.py

@@ -1,6 +1,5 @@
 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__)

+ 6 - 6
app/rank_views.py

@@ -9,17 +9,17 @@ rank_website: Optional[RankWebsite] = None
 rank_app: Optional[Flask] = None
 
 
-@rank_web.route('/up')
-def rank_up():
+@rank_web.route('/up/<int:page>')
+def rank_up(page: int):
     global rank_website
-    data = rank_website.get_rank("DESC")
+    data = rank_website.get_rank(page, "DESC")
     return render_template("rank_web/ranking.html", rank_info=data, ranking_name="高分榜")
 
 
-@rank_web.route('/down')
-def rank_down():
+@rank_web.route('/down/<int:page>')
+def rank_down(page: int):
     global rank_website
-    data = rank_website.get_rank("ASC")
+    data = rank_website.get_rank(page, "ASC")
     return render_template("rank_web/ranking.html", rank_info=data, ranking_name="警示榜")
 
 

+ 5 - 3
app/rank_web.py

@@ -10,16 +10,18 @@ class RankWebsite:
         self._db = db
         self.app = app
 
-    def get_rank(self, order_by: str = "DESC") -> Optional[List[Tuple]]:
+    def get_rank(self, page: int, order_by: str = "DESC") -> Optional[List[Tuple]]:
+        offset = 20 * (page - 1)
         cur = self._db.search(columns=['UserID', 'Name', 'Score', 'Reputation'],
                               table='user',
                               where='IsManager=0',
                               order_by=[('Reputation', order_by), ('Score', order_by), ('UserID', order_by)],
-                              limit=200)
+                              limit=20,
+                              offset=offset)
         if cur is None:
             return None
         res = []
         for index in range(cur.rowcount):
             i = cur.fetchone()
-            res.append((f"{index + 1}", i[1], i[0][:Config.tk_show_uid_len], str(i[3]), str(i[2])))
+            res.append((f"{offset + index + 1}", i[1], i[0][:Config.tk_show_uid_len], str(i[3]), str(i[2])))
         return res

+ 14 - 6
app/static/styles/index.css

@@ -25,17 +25,24 @@ body {
     position: absolute;
     display: block;
     text-align: center;
-    color: #F0FFF0;
-    background-color: rgb(106, 90, 205);
+
     border-radius: 10px;
     border-width: 2px;
     border-style: ridge;
     border-color: rgb(123, 104, 238);
+
+    margin-top: 300px;
+
+    color: #F0FFF0;
+    background-color: #FFDC00;
+
     font-size: 30px;
-    margin-top: 20%;
     height: 100px;
 
-    transition: width 1s, height 1s, left 1s, border-radius 1s;
+    transition: width 1s, height 1s,
+    left 1s, border-radius 1s,
+    background-color 1s, color 1s,
+    font-size 1s, margin-top 1s;
 }
 
 @media all and (max-width: 992px) {
@@ -55,12 +62,13 @@ body {
         left: 40%;
         width: 20%;
         height: 150px;
+        margin-top: 275px;
         border-radius: 30px;
-    }
 
-    #btn:active {
         color: black;
         background-color: #F0FFF0;
+
+        font-size: 50px;
     }
 }
 

+ 0 - 62
app/static/styles/nav.css

@@ -1,62 +0,0 @@
-#nav {
-    background-color: #F08080;
-}
-
-#nav ul {
-    border-width: 5px;
-    border-style: ridge;
-    border-color: #F08080;
-
-    height: 30px;
-    margin: 25px 0 30px 0;
-    list-style: none;
-}
-
-#nav li {
-    margin: 0 10px 0;
-    height: 30px;
-    text-align: center;
-    line-height: 30px;
-    display: inline;
-}
-
-#nav a.nav-item {
-    color: #ffffff;
-    text-decoration: none;
-    padding: 20px 30px;
-    display: inline;
-}
-
-#nav h1.nav-h1 {
-    border-width: 5px;
-    border-style: ridge;
-    border-color: #F08080;
-
-    color: #000000;
-    text-decoration: none;
-    padding: 15px 40px;
-    display: inline;
-
-    background-color: #ffffff;
-}
-
-#nav a.nav-item:hover {
-    border-width: 5px;
-    border-style: ridge;
-    border-color: #F08080;
-
-    background-color: #F08080;
-    padding: 12px 25px; /* 修改宽度, 防止后面的元素移动 */
-}
-
-#nav h1.nav-h1:hover {
-    border-width: 5px;
-    border-style: ridge;
-    border-color: #F08080;
-
-    color: #ffffff;
-    text-decoration: none;
-    padding: 15px 40px;
-
-    background-color: #000000;
-}

+ 12 - 13
app/templates/base.html

@@ -35,17 +35,16 @@
 <body>
 
 {% block nav %}
-    <nav id="top-nav">
-        <section class="logo">
-            <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('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>
+    <section class="logo">
+        <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('hello_web.start') }}"> 首页 </a></li>
+        <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('rank_web.rank_up', page=1) }}"> 高分榜 </a></li>
+        <li class="top-nav-item"><a class="top-nav-item" href="{{ url_for('rank_web.rank_down', page=1) }}"> 警告榜 </a>
+        </li>
+        <li class="top-nav-item"><a class="top-nav-item"> 积分商城 </a></li>
+    </ul>
 {% endblock %}
 
 <article>
@@ -54,6 +53,7 @@
             <h1 style=";font-size: 35px;font-weight: bold;margin: 3% auto 4%;"> {% block h1_title %} {% endblock %}</h1>
         </section>
     {% endblock %}
+
     {% block content_ %}
         <section id="main">
             {% block content %}{% endblock %}
@@ -61,6 +61,7 @@
     {% endblock %}
 </article>
 
+<p id="last-p"></p>  <!-- 占位作用 -->
 {% block bnav %}
     <nav id="bottom-nav">
         <p class="bottom-nav-item"> 版权归属 (c) SuperHuan<br>在
@@ -68,7 +69,5 @@
     </nav>
 {% endblock %}
 
-<p id="last-p"></p>  <!-- 占位作用 -->
-
 </body>
 </html>

+ 2 - 2
conf/__init__.py

@@ -18,8 +18,8 @@ class Config(ConfigTkinter, ConfigSecret, ConfigSystem, ConfUser, ConfigExport,
              ConfigDatabase,
              ConfigCapture,
              ConfigMatplotlib):
-    run_type = p_args.run[0]
-    program = p_args.program[0]
+    run_type = p_args['run']
+    program = p_args['program']
 
     font_d = {"noto": noto_font}
     picture_d = {"head": head_pic, "rank_bg": rank_bg_pic}

+ 2 - 2
conf/aliyun.py

@@ -2,8 +2,8 @@ from . import args
 
 
 class ConfigAliyunRelease:
-    aliyun_key = args.p_args.aliyun_key[0]
-    aliyun_secret = args.p_args.aliyun_secret[0]
+    aliyun_key = args.p_args['aliyun_key']
+    aliyun_secret = args.p_args['aliyun_secret']
     aliyun_region_id = "cn-shanghai"
 
 

+ 76 - 40
conf/args.py

@@ -1,63 +1,99 @@
 import argparse
 import os
-import warnings
+import sys
+from typing import Optional
 
-parser = argparse.ArgumentParser()
-parser.add_argument("--mysql_url", nargs=1, required=False, type=str, default=None, help="MySQL-URL")
-parser.add_argument("--mysql_name", nargs=1, required=False, type=str, default=None, help="MySQL-用户名")
-parser.add_argument("--mysql_passwd", nargs=1, required=False, type=str, default=None, help="MySQL-密码")
-parser.add_argument("--mysql_port", nargs=1, required=False, type=str, default=[None], help="MySQL-端口")
+res = os.environ.get('HGSSystem_NA')
+p_args: dict[str: Optional[str]] = {"mysql_url": None,
+                                    "mysql_name": None,
+                                    "mysql_passwd": None,
+                                    "mysql_port": None,
+                                    "aliyun_key": None,
+                                    "aliyun_secret": None,
+                                    "program": None,
+                                    "run": None}
 
-parser.add_argument("--aliyun_key", nargs=1, required=False, type=str, default=None, help="阿里云认证-KET")
-parser.add_argument("--aliyun_secret", nargs=1, required=False, type=str, default=None, help="阿里云认证-SECRET")
+if res is None or res == "False":
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--mysql_url", nargs=1, type=str, help="MySQL-URL")
+    parser.add_argument("--mysql_name", nargs=1, type=str, help="MySQL-用户名")
+    parser.add_argument("--mysql_passwd", nargs=1, type=str, help="MySQL-密码")
+    parser.add_argument("--mysql_port", nargs=1, type=str, help="MySQL-端口")
 
-parser.add_argument("--program", nargs=1, required=True, type=str, choices=["setup",
-                                                                            "garbage",
-                                                                            "ranking",
-                                                                            "manager",
-                                                                            "ranking_website"],
-                    help="选择启动的程序")
+    parser.add_argument("--aliyun_key", nargs=1, type=str, help="阿里云认证-KET")
+    parser.add_argument("--aliyun_secret", nargs=1, type=str, help="阿里云认证-SECRET")
 
-parser.add_argument("--run", nargs=1, required=False, type=str, choices=["Test",
-                                                                         "Release"],
-                    default=["Release"],
-                    help="选择允许模式")
+    parser.add_argument("--program", nargs=1, type=str, choices=["setup",
+                                                                 "garbage",
+                                                                 "ranking",
+                                                                 "manager",
+                                                                 "website"],
+                        help="选择启动的程序")
 
-p_args = parser.parse_args()
+    parser.add_argument("--run_type", nargs=1, type=str, choices=["test",
+                                                                  "release"],
+                        default=["release"],
+                        help="选择允许模式")
 
-if p_args.mysql_url is None or p_args.mysql_name is None or p_args.mysql_passwd is None:
+    p_args_ = parser.parse_args()
+    if p_args_.mysql_url is not None:
+        p_args['mysql_url'] = p_args_.mysql_url[0]
+    if p_args_.mysql_name is not None:
+        p_args['mysql_name'] = p_args_.mysql_name[0]
+    if p_args_.mysql_passwd is not None:
+        p_args['mysql_passwd'] = p_args_.mysql_passwd[0]
+    if p_args_.mysql_port is not None:
+        p_args['mysql_port'] = p_args_.mysql_port[0]
+
+    if p_args_.aliyun_key is not None:
+        p_args['aliyun_key'] = p_args_.aliyun_key[0]
+    if p_args_.aliyun_secret is not None:
+        p_args['aliyun_secret'] = p_args_.aliyun_secret[0]
+
+    if p_args_.program is not None:
+        p_args['program'] = p_args_.program[0].lower()
+    if p_args_.run_type is not None:
+        p_args['run'] = p_args_.run_type[0].lower()
+
+if p_args.get('program') is None:
+    res = os.environ.get('HGSSystem_Program')
+    if res is None:
+        print("未指定启动程序")
+        exit(1)
+    p_args['program'] = res
+
+if p_args.get('mysql_url') is None or p_args.get('mysql_name') is None or p_args.get('mysql_passwd') is None:
     res = os.environ.get('HGSSystem_MySQL')
     if res is not None:
         res = res.split(';')
         if len(res) == 4:
-            p_args.mysql_url = [res[0]]
-            p_args.mysql_name = [res[1]]
-            p_args.mysql_passwd = [res[2]]
-            p_args.mysql_port = [res[3]]
+            p_args['mysql_url'] = res[0]
+            p_args['mysql_name'] = res[1]
+            p_args['mysql_passwd'] = res[2]
+            p_args['mysql_port'] = res[3]
         elif len(res) == 3:
-            p_args.mysql_url = [res[0]]
-            p_args.mysql_name = [res[1]]
-            p_args.mysql_passwd = [res[2]]
-            p_args.mysql_port = [None]
+            p_args['mysql_url'] = res[0]
+            p_args['mysql_name'] = res[1]
+            p_args['mysql_passwd'] = res[2]
+            p_args['mysql_port'] = ""
         else:
-            warnings.warn("MYSQL地址错误")
+            print("MYSQL地址错误", file=sys.stderr)
             exit(1)
-    else:
-        p_args.mysql_url = [None]
-        p_args.mysql_name = [None]
-        p_args.mysql_passwd = [None]
-        p_args.mysql_port = [None]
 
-if p_args.aliyun_key is None or p_args.aliyun_secret is None:
+if p_args.get('aliyun_key') is None or p_args.get('aliyun_secret') is None:
     res = os.environ.get('HGSSystem_Aliyun')
     if res is not None:
         res = res.split(';')
         if len(res) == 2:
-            p_args.aliyun_key = [res[0]]
-            p_args.aliyun_secret = [res[1]]
+            p_args["aliyun_key"] = res[0]
+            p_args["aliyun_secret"] = res[1]
         else:
-            warnings.warn("阿里云认证错误")
+            print("阿里云认证错误", file=sys.stderr)
             exit(1)
+
+if p_args.get('run') is None:
+    res = os.environ.get('HGSSystem_Run')
+    if res is not None:
+        p_args['run'] = res.lower()
     else:
-        p_args.aliyun_key = [None]
-        p_args.aliyun_secret = [None]
+        p_args['run'] = "release"

+ 5 - 4
conf/sql.py

@@ -3,10 +3,11 @@ from . import args
 
 class ConfigDatabaseRelease:
     database = 'MySQL'
-    mysql_url = args.p_args.mysql_url[0]
-    mysql_name = args.p_args.mysql_name[0]
-    mysql_passwd = args.p_args.mysql_passwd[0]
-    mysql_port = args.p_args.mysql_port[0]
+    mysql_url = args.p_args['mysql_url']
+    mysql_name = args.p_args['mysql_name']
+    mysql_passwd = args.p_args['mysql_passwd']
+    mysql_port = args.p_args['mysql_port'] if (args.p_args['mysql_port'] is not None and
+                                               len(args.p_args['mysql_port']) > 0) else None
 
 
 ConfigDatabase = ConfigDatabaseRelease

+ 17 - 1
conf/sys_default.py

@@ -1,3 +1,6 @@
+from args import p_args
+
+
 class ConfigSecretRelease:
     passwd_salt = "HGSSystem"
 
@@ -25,6 +28,19 @@ HGSSystem 版权归属 SuperHuan
     '''.strip()
 
 
+class ConfigSystemDebug(ConfigSystemRelease):
+    search_reset_time = 1  # 搜索间隔的时间
+    about_info = f'''
+HGSSystem is Garbage Sorting System
+
+HGSSystem 版权归属 SuperHuan
+作者: SongZihuan[SuperHuan]
+
+开发者模式
+项目托关于 Github 平台
+    '''.strip()
+
+
 class ConfigExportRelease:
     qr_show_uid_len = 12  # qr 码上展示uid的长度
 
@@ -42,6 +58,6 @@ class ConfigTkinterRelease:
 
 ConfigTkinter = ConfigTkinterRelease
 ConfigExport = ConfigExportRelease
-ConfigSystem = ConfigSystemRelease
+ConfigSystem = ConfigSystemDebug if p_args['run'] == 'Debug' else ConfigSystemRelease
 ConfUser = ConfUserRelease
 ConfigSecret = ConfigSecretRelease

+ 18 - 5
main.py

@@ -10,12 +10,23 @@ import os
 
 from conf import Config
 
+app = None
+
 
 def can_not_load(name):
     print(f"无法加载 {name} 系统, 该系统或其依赖可能不存在", file=sys.stderr)
 
 
 def main():
+    """
+    入口程序
+    :return:
+    """
+
+    if __name__ != "__main__" and Config.program != "website":
+        print("运行程序出错", file=sys.stderr)
+        exit(1)
+
     if Config.mysql_url is None or Config.mysql_name is None:
         print("请提供MySQL信息")
         sys.exit(1)
@@ -72,7 +83,7 @@ def main():
 
         station = admin_station.AdminStation(mysql)
         station.mainloop()
-    elif program_name == "ranking_website":
+    elif program_name == "website":
         try:
             from app import creat_web
             from app.views import register
@@ -80,12 +91,14 @@ def main():
             can_not_load("在线排行榜服务")
             sys.exit(1)
 
-        app = creat_web(mysql)
-        app.run()
+        global app
+        app = creat_web(mysql)  # 暴露 app 接口
+        if __name__ == "__main__":
+            debug = Config.run_type == 'Debug'
+            app.run(debug=debug)
     else:
         can_not_load(program_name)
         sys.exit(1)
 
 
-if __name__ == '__main__':
-    main()
+main()