SongZihuan пре 3 година
родитељ
комит
1d987a9d5e
15 измењених фајлова са 124 додато и 124 уклоњено
  1. 1 1
      .gitignore
  2. 35 0
      core/archive.py
  3. 14 14
      core/blog.py
  4. 0 35
      core/file.py
  5. 3 3
      core/user.py
  6. 11 11
      sql/archive.py
  7. 12 12
      sql/blog.py
  8. 1 1
      static/styles/archive/archive.css
  9. 8 8
      templates/archive/archive.html
  10. 2 2
      templates/base.html
  11. 2 2
      templates/docx/article.html
  12. 2 2
      templates/docx/docx.html
  13. 2 2
      view/__init__.py
  14. 17 17
      view/archive.py
  15. 14 14
      view/docx.py

+ 1 - 1
.gitignore

@@ -81,7 +81,7 @@ target/
 .ipynb_checkpoints
 
 # IPython
-profile_default/
+proarchive_default/
 ipython_config.py
 
 # pyenv

+ 35 - 0
core/archive.py

@@ -0,0 +1,35 @@
+from typing import Optional
+
+from sql.archive import get_archive_id_by_name, create_archive, get_archive_list, read_archive, delete_archive
+
+
+def load_archive_by_name(name: str) -> "Optional[Archive]":
+    archive_id, describe = get_archive_id_by_name(name)
+    if archive_id is None:
+        return None
+    return Archive(name, describe, archive_id)
+
+
+class Archive:
+    def __init__(self, name, describe, archive_id):
+        self.name = name
+        self.describe = describe
+        self.archive_id = archive_id
+
+    @staticmethod
+    def get_archive_list():
+        return get_archive_list()
+
+    @staticmethod
+    def get_blog_archive(blog_id: int):
+        archive = read_archive(blog_id)
+        archive_list = []
+        for i in archive:
+            archive_list.append(Archive(i[1], i[2], i[0]))
+        return archive_list
+
+    def create(self):
+        return create_archive(self.name, self.describe)
+
+    def delete(self):
+        return delete_archive(self.archive_id)

+ 14 - 14
core/blog.py

@@ -2,15 +2,15 @@ from typing import Optional
 
 from sql.blog import (get_blog_list,
                       get_blog_count,
-                      get_file_blog_list,
-                      get_file_blog_count,
+                      get_archive_blog_list,
+                      get_archive_blog_count,
                       get_blog_list_not_top,
                       read_blog,
                       create_blog,
                       delete_blog,
                       get_user_user_count)
 import core.user
-import core.file
+import core.archive
 import core.comment
 
 
@@ -34,12 +34,12 @@ def load_blog_by_id(blog_id) -> "Optional[BlogArticle]":
     update_time = blog[6]
     top = blog[7]
     comment = core.comment.load_comment_list(blog_id)
-    file = core.file.File.get_blog_file(blog_id)
-    return BlogArticle(blog_id, auth, title, subtitle, context, update_time, top, comment, file)
+    archive = core.archive.Archive.get_blog_archive(blog_id)
+    return BlogArticle(blog_id, auth, title, subtitle, context, update_time, top, comment, archive)
 
 
 class BlogArticle:
-    def __init__(self, blog_id, auth, title, subtitle, context, update_time=None, top=False, comment=None, file=None):
+    def __init__(self, blog_id, auth, title, subtitle, context, update_time=None, top=False, comment=None, archive=None):
         self.blog_id = blog_id
         self.user = auth
         self.title = title
@@ -48,28 +48,28 @@ class BlogArticle:
         self.update_time = update_time
         self.top = top
         self.comment = [] if comment is None else comment
-        self.file = [] if file is None else file
+        self.archive = [] if archive is None else archive
 
     @staticmethod
-    def get_blog_list(file_id=None, limit=None, offset=None, not_top=False):
-        if file_id is None:
+    def get_blog_list(archive_id=None, limit=None, offset=None, not_top=False):
+        if archive_id is None:
             if not_top:
                 return get_blog_list_not_top(limit=limit, offset=offset)
             return get_blog_list(limit=limit, offset=offset)
-        return get_file_blog_list(file_id, limit=limit, offset=offset)
+        return get_archive_blog_list(archive_id, limit=limit, offset=offset)
 
     @staticmethod
-    def get_blog_count(file_id=None, auth=None):
-        if file_id is None:
+    def get_blog_count(archive_id=None, auth=None):
+        if archive_id is None:
             return get_blog_count()
         if auth is None:
-            return get_file_blog_count(file_id)
+            return get_archive_blog_count(archive_id)
         return get_user_user_count(auth.get_user_id())
 
     def create(self):
         if self.blog_id is not None:  # 只有 blog_id为None时才使用
             return False
-        return create_blog(self.user.get_user_id(), self.title, self.subtitle, self.context, self.file)
+        return create_blog(self.user.get_user_id(), self.title, self.subtitle, self.context, self.archive)
 
     def delete(self):
         return delete_blog(self.blog_id)

+ 0 - 35
core/file.py

@@ -1,35 +0,0 @@
-from typing import Optional
-
-from sql.file import get_file_id_by_name, create_file, get_file_list, read_file, delete_file
-
-
-def load_file_by_name(name: str) -> "Optional[File]":
-    file_id, describe = get_file_id_by_name(name)
-    if file_id is None:
-        return None
-    return File(name, describe, file_id)
-
-
-class File:
-    def __init__(self, name, describe, file_id):
-        self.name = name
-        self.describe = describe
-        self.id = file_id
-
-    @staticmethod
-    def get_file_list():
-        return get_file_list()
-
-    @staticmethod
-    def get_blog_file(blog_id: int):
-        file = read_file(blog_id)
-        file_list = []
-        for i in file:
-            file_list.append(File(i[1], i[2], i[0]))
-        return file_list
-
-    def create(self):
-        return create_file(self.name, self.describe)
-
-    def delete(self):
-        return delete_file(self.id)

+ 3 - 3
core/user.py

@@ -51,7 +51,7 @@ class User(UserMixin):
             self.role_name = get_role_name(role)
         else:
             self.role_name = None
-        self.id = user_id
+        self.user_id = user_id
 
     def count_info(self):
         msg = core.msg.Message.get_msg_count(self)
@@ -94,7 +94,7 @@ class User(UserMixin):
         return self.email
 
     def get_user_id(self):
-        return self.id
+        return self.user_id
 
     @staticmethod
     def creat_token(email: str, passwd_hash: str):
@@ -124,4 +124,4 @@ class User(UserMixin):
         return create_user(self.email, self.passwd_hash)
 
     def delete(self):
-        return delete_user(self.id)
+        return delete_user(self.user_id)

+ 11 - 11
sql/file.py → sql/archive.py

@@ -2,9 +2,9 @@ from sql import db
 from typing import Optional
 
 
-def create_file(name: str, describe: str):
+def create_archive(name: str, describe: str):
     """ 创建新归档 """
-    cur = db.insert(table="file",
+    cur = db.insert(table="archive",
                     columns=["Name", "DescribeText"],
                     values=f"'{name}', '{describe}'")
     if cur is None or cur.rowcount == 0:
@@ -12,28 +12,28 @@ def create_file(name: str, describe: str):
     return True
 
 
-def read_file(blog_id: int):
+def read_archive(blog_id: int):
     """ 获取文章的归档 """
-    cur = db.search(columns=["FileID", "FileName", "DescribeText"], table="blog_file_with_name",
+    cur = db.search(columns=["ArchiveID", "ArchiveName", "DescribeText"], table="blog_archive_with_name",
                     where=f"BlogID={blog_id}")
     if cur is None or cur.rowcount == 0:
         return []
     return cur.fetchall()
 
 
-def delete_file(file_id: int):
-    cur = db.delete(table="blog_file", where=f"FileID={file_id}")
+def delete_archive(archive_id: int):
+    cur = db.delete(table="blog_archive", where=f"ArchiveID={archive_id}")
     if cur is None:
         return False
-    cur = db.delete(table="file", where=f"ID={file_id}")
+    cur = db.delete(table="archive", where=f"ID={archive_id}")
     if cur is None or cur.rowcount == 0:
         return False
     return True
 
 
-def get_file_list(limit: Optional[int] = None, offset: Optional[int] = None):
+def get_archive_list(limit: Optional[int] = None, offset: Optional[int] = None):
     """ 获取归档列表 """
-    cur = db.search(columns=["ID", "Name", "DescribeText", "Count"], table="file_with_count",
+    cur = db.search(columns=["ID", "Name", "DescribeText", "Count"], table="archive_with_count",
                     limit=limit,
                     offset=offset)
     if cur is None or cur.rowcount == 0:
@@ -41,9 +41,9 @@ def get_file_list(limit: Optional[int] = None, offset: Optional[int] = None):
     return cur.fetchall()
 
 
-def get_file_id_by_name(name: str):
+def get_archive_id_by_name(name: str):
     """ 获取归档 ID """
-    cur = db.search(columns=["ID", "DescribeText"], table="file",
+    cur = db.search(columns=["ID", "DescribeText"], table="archive",
                     where=f"Name='{name}'")
     if cur is None or cur.rowcount == 0:
         return None, None

+ 12 - 12
sql/blog.py

@@ -1,18 +1,18 @@
 from sql import db
 from typing import Optional, List
-import core.file
+import core.archive
 
 
-def create_blog(auth_id: int, title: str, subtitle:str, context: str, file_list: List[core.file.File]) -> bool:
+def create_blog(auth_id: int, title: str, subtitle:str, context: str, archive_list: List[core.archive.Archive]) -> bool:
     """写入新的blog"""
     cur = db.insert(table="blog", columns=["Auth", "Title", "SubTitle", "Context"],
                     values=f"{auth_id}, '{title}', '{subtitle}', '{context}'")
     if cur is None or cur.rowcount == 0:
         return False
     blog_id = cur.lastrowid
-    for file in file_list:
-        cur = db.insert(table="blog_file", columns=["BlogID", "FileID"],
-                        values=f"{blog_id}, {file.id}")
+    for archive in archive_list:
+        cur = db.insert(table="blog_archive", columns=["BlogID", "ArchiveID"],
+                        values=f"{blog_id}, {archive.archive_id}")
         if cur is None or cur.rowcount == 0:
             return False
     return True
@@ -29,7 +29,7 @@ def read_blog(blog_id: int) -> list:
 
 
 def delete_blog(blog_id: int):
-    cur = db.delete(table="blog_file", where=f"BlogID={blog_id}")
+    cur = db.delete(table="blog_archive", where=f"BlogID={blog_id}")
     if cur is None:
         return False
     cur = db.delete(table="comment", where=f"BlogID={blog_id}")
@@ -70,10 +70,10 @@ def get_blog_count() -> int:
     return cur.fetchone()[0]
 
 
-def get_file_blog_list(file_id, limit: Optional[int] = None, offset: Optional[int] = None) -> list:
+def get_archive_blog_list(archive_id, limit: Optional[int] = None, offset: Optional[int] = None) -> list:
     """ 获得指定归档的 blog 列表 """
-    cur = db.search(columns=["BlogID", "Title", "SubTitle", "UpdateTime", "Top"], table="blog_with_file",
-                    where=f"FileID={file_id}",
+    cur = db.search(columns=["BlogID", "Title", "SubTitle", "UpdateTime", "Top"], table="blog_with_archive",
+                    where=f"ArchiveID={archive_id}",
                     limit=limit,
                     offset=offset)
     if cur is None or cur.rowcount == 0:
@@ -81,10 +81,10 @@ def get_file_blog_list(file_id, limit: Optional[int] = None, offset: Optional[in
     return cur.fetchall()
 
 
-def get_file_blog_count(file_id) -> int:
+def get_archive_blog_count(archive_id) -> int:
     """ 统计指定归档的 blog 个数 """
-    cur = db.search(columns=["count(ID)"], table="blog_with_file",
-                    where=f"FileID={file_id}")
+    cur = db.search(columns=["count(ID)"], table="blog_with_archive",
+                    where=f"ArchiveID={archive_id}")
     if cur is None or cur.rowcount == 0:
         return 0
     return cur.fetchone()[0]

+ 1 - 1
static/styles/file/file.css → static/styles/archive/archive.css

@@ -1,4 +1,4 @@
-.file {
+.archive {
     background-color: white;
     border-radius: 10px;
     border: 2px solid #39CCCC;

+ 8 - 8
templates/file/file.html → templates/archive/archive.html

@@ -4,7 +4,7 @@
 
 {% block style %}
     {{ super() }}
-    <link href="{{ url_for('static', filename='styles/file/file.css') }}" rel="stylesheet">
+    <link href="{{ url_for('static', filename='styles/archive/archive.css') }}" rel="stylesheet">
 {% endblock %}
 
 {% block context %}
@@ -13,7 +13,7 @@
             <div class="row">
                 <section class="col-12 col-lg-6 offset-lg-3 text-right">
                     <div class="create">
-                        <form class="writer clearfix" action="{{ url_for('file.create_file_page') }}" method="post">
+                        <form class="writer clearfix" action="{{ url_for('archive.create_archive_page') }}" method="post">
                         {{ form.hidden_tag() }}
                         <div class="form-group text-left">
                             {{ form.name.label }}
@@ -35,13 +35,13 @@
     {% endif %}
 
     <section id="base" class="d-flex mt-3 container justify-content-center flex-wrap">
-        {% for file in file_list %}
-            <div class="file mb-3 mr-2 ml-2">
-                <h3> {{ file[1] }} </h3>
+        {% for archive in archive_list %}
+            <div class="archive mb-3 mr-2 ml-2">
+                <h3> {{ archive[1] }} </h3>
                 <hr>
-                <p> {{ file[2] }} </p>
-                <p> 篇数: {{ file[3] }} </p>
-                <a class="btn btn-info" href="{{ url_for("docx.file_page", file=file[0], page=1) }}"> 进入 </a>
+                <p> {{ archive[2] }} </p>
+                <p> 篇数: {{ archive[3] }} </p>
+                <a class="btn btn-info" href="{{ url_for("docx.archive_page", archive=archive[0], page=1) }}"> 进入 </a>
             </div>
         {% endfor %}
     </section>

+ 2 - 2
templates/base.html

@@ -20,7 +20,7 @@
             body{
                 background-color: #f0fcff;
             }
-    </style>
+        </style>
     {% endblock %}
 
     <title>{% block title %} {% endblock %} - {{ blog_name }} </title>
@@ -40,7 +40,7 @@
 
                 {% if current_user.check_role("ReadBlog") %}
                 <li class="nav-item">
-                    <a href="{{ url_for('file.file_page') }}" class="nav-link {{ top_nav[1] }}">
+                    <a href="{{ url_for('archive.archive_page') }}" class="nav-link {{ top_nav[1] }}">
                         归档
                     </a>
                 </li>

+ 2 - 2
templates/docx/article.html

@@ -15,8 +15,8 @@
             <div class="row">
                 <article class="col-12">
                     <h1> {{ article.title }} <small> {{ article.subtitle }} <small> {{ article.update_time}} </small> </small> </h1>
-                    {% for file in article.file %}
-                        <span class="badge badge-info"> {{ file.name }} </span>
+                    {% for archive in article.archive %}
+                        <span class="badge badge-info"> {{ archive.name }} </span>
                     {% endfor %}
                     <hr>
 

+ 2 - 2
templates/docx/docx.html

@@ -28,8 +28,8 @@
                             </div>
 
                             <div class="form-group">
-                                {{ form.file.label }}
-                                {{ form.file(class="form-control") }}
+                                {{ form.archive.label }}
+                                {{ form.archive(class="form-control") }}
                             </div>
 
                             {{ form.context(class="form-control mb-2", rows="15") }}

+ 2 - 2
view/__init__.py

@@ -1,11 +1,11 @@
 from view.index import IndexApp
 from view.docx import DocxApp
-from view.file import FileApp
+from view.archive import ArchiveApp
 from view.msg import MsgApp
 from view.about_me import AboutMeApp
 from view.auth import AuthApp
 
 
-class WebApp(IndexApp, DocxApp, FileApp, MsgApp, AboutMeApp, AuthApp):
+class WebApp(IndexApp, DocxApp, ArchiveApp, MsgApp, AboutMeApp, AuthApp):
     def __init__(self, import_name):
         super(WebApp, self).__init__(import_name)

+ 17 - 17
view/file.py → view/archive.py

@@ -7,51 +7,51 @@ from wtforms.validators import DataRequired, Length
 
 from view.base import App
 from core.user import User
-from core.file import File
+from core.archive import Archive
 
-file = Blueprint("file", __name__)
+archive = Blueprint("archive", __name__)
 app: Optional[Flask] = None
 
 
-class CreateFileForm(FlaskForm):
+class CreateArchiveForm(FlaskForm):
     name = StringField("名字", validators=[DataRequired(), Length(1, 10)])
     describe = StringField("描述", validators=[DataRequired(), Length(1, 30)])
     submit = SubmitField("创建归档")
 
 
-@file.route('/')
-def file_page():
-    file_list = File.get_file_list()
-    return render_template("file/file.html", file_list=file_list, form=CreateFileForm())
+@archive.route('/')
+def archive_page():
+    archive_list = Archive.get_archive_list()
+    return render_template("archive/archive.html", archive_list=archive_list, form=CreateArchiveForm())
 
 
-@file.route("create-file", methods=["POST"])
+@archive.route("create-archive", methods=["POST"])
 @login_required
-def create_file_page():
-    form = CreateFileForm()
+def create_archive_page():
+    form = CreateArchiveForm()
     if form.validate_on_submit():
         auth: User = current_user
         if not auth.check_role("WriteBlog"):  # 检查相应的权限
             abort(403)
             return
 
-        if File(form.name.data, form.describe.data, None).create():
+        if Archive(form.name.data, form.describe.data, None).create():
             flash(f"创建归档 {form.name.data} 成功")
         else:
             flash(f"创建归档 {form.name.data} 失败")
-        return redirect(url_for("file.file_page"))
+        return redirect(url_for("archive.archive_page"))
     abort(404)
 
 
-@file.context_processor
-def inject_base():
+@archive.context_processor
+def inject():
     return {"top_nav": ["", "active", "", "", "", ""]}
 
 
-class FileApp(App):
+class ArchiveApp(App):
     def __init__(self, import_name):
-        super(FileApp, self).__init__(import_name)
+        super(ArchiveApp, self).__init__(import_name)
 
         global app
         app = self._app
-        app.register_blueprint(file, url_prefix="/file")
+        app.register_blueprint(archive, url_prefix="/archive")

+ 14 - 14
view/docx.py

@@ -14,7 +14,7 @@ from sql.base import DBBit
 from core.blog import BlogArticle, load_blog_by_id
 from core.user import User
 from core.comment import Comment
-from core.file import load_file_by_name
+from core.archive import load_archive_by_name
 
 docx = Blueprint("docx", __name__)
 app: Optional[Flask] = None
@@ -25,7 +25,7 @@ allow_tag = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li',
 class WriteBlogForm(FlaskForm):
     title = StringField("标题", validators=[DataRequired(), Length(1, 10)])
     subtitle = StringField("副标题", validators=[DataRequired(), Length(1, 10)])
-    file = StringField("归档", validators=[DataRequired(), Length(1, 10)])
+    archive = StringField("归档", validators=[DataRequired(), Length(1, 10)])
     context = PageDownField("博客内容", validators=[DataRequired()])
     submit = SubmitField("提交博客")
 
@@ -51,15 +51,15 @@ def docx_page(page: int = 1):
                            form=WriteBlogForm())
 
 
-@docx.route('/<int:file>/<int:page>')
-def file_page(file: int, page: int = 1):
+@docx.route('/<int:archive>/<int:page>')
+def archive_page(archive: int, page: int = 1):
     if page < 1:
         abort(404)
         return
 
-    blog_list = BlogArticle.get_blog_list(file_id=file, limit=20, offset=(page - 1) * 20)
-    max_page = App.get_max_page(BlogArticle.get_blog_count(file_id=file), 20)
-    page_list = App.get_page("docx.file_page", page, max_page)
+    blog_list = BlogArticle.get_blog_list(archive_id=archive, limit=20, offset=(page - 1) * 20)
+    max_page = App.get_max_page(BlogArticle.get_blog_count(archive_id=archive), 20)
+    page_list = App.get_page("docx.archive_page", page, max_page)
     return render_template("docx/docx.html",
                            blog_list=blog_list,
                            is_top=DBBit.BIT_1,
@@ -75,7 +75,7 @@ def article_page(blog_id: int):
         return
     return render_template("docx/article.html",
                            article=article,
-                           file_list=article.file,
+                           archive_list=article.archive,
                            form=WriteCommentForm())
 
 
@@ -112,18 +112,18 @@ def create_docx_page():
         title = form.title.data
         subtitle = form.subtitle.data
 
-        file = set(str(form.file.data).replace(" ", "").split(";"))
-        file_list = []
-        for f in file:
-            f_ = load_file_by_name(f)
+        archive = set(str(form.archive.data).replace(" ", "").split(";"))
+        archive_list = []
+        for f in archive:
+            f_ = load_archive_by_name(f)
             if f_ is not None:
-                file_list.append(f_)
+                archive_list.append(f_)
 
         context = bleach.linkify(
             bleach.clean(
                 markdown(form.context.data, output_format='html'), tags=allow_tag, strip=True))
 
-        if BlogArticle(None, current_user, title, subtitle, context, file=file_list).create():
+        if BlogArticle(None, current_user, title, subtitle, context, archive=archive_list).create():
             flash(f"博客 {title} 发表成功")
         else:
             flash(f"博客 {title} 发表失败")