Browse Source

feat: 文章归档选择使用下拉框

SongZihuan 3 years ago
parent
commit
270c42d8c8
5 changed files with 21 additions and 19 deletions
  1. 12 10
      app/docx.py
  2. 4 4
      object/archive.py
  3. 3 3
      sql/archive.py
  4. 1 1
      templates/archive/archive.html
  5. 1 1
      templates/error.html

+ 12 - 10
app/docx.py

@@ -1,14 +1,14 @@
 from flask import Blueprint, render_template, abort, redirect, url_for, flash, make_response
 from flask import Blueprint, render_template, abort, redirect, url_for, flash, make_response
 from flask_wtf import FlaskForm
 from flask_wtf import FlaskForm
 from flask_login import login_required, current_user
 from flask_login import login_required, current_user
-from wtforms import TextAreaField, StringField, SubmitField
+from wtforms import TextAreaField, StringField, SelectMultipleField, SubmitField
 from wtforms.validators import DataRequired
 from wtforms.validators import DataRequired
 
 
 import app
 import app
 from sql.base import DBBit
 from sql.base import DBBit
 from object.blog import BlogArticle, load_blog_by_id
 from object.blog import BlogArticle, load_blog_by_id
 from object.comment import Comment
 from object.comment import Comment
-from object.archive import load_archive_by_name
+from object.archive import load_archive_by_id, Archive
 
 
 docx = Blueprint("docx", __name__)
 docx = Blueprint("docx", __name__)
 
 
@@ -16,13 +16,15 @@ docx = Blueprint("docx", __name__)
 class WriteBlogForm(FlaskForm):
 class WriteBlogForm(FlaskForm):
     title = StringField("标题", validators=[DataRequired()])
     title = StringField("标题", validators=[DataRequired()])
     subtitle = StringField("副标题", validators=[DataRequired()])
     subtitle = StringField("副标题", validators=[DataRequired()])
-    archive = StringField("归档")
+    archive = SelectMultipleField("归档", coerce=int)
     context = TextAreaField("博客内容", validators=[DataRequired()])
     context = TextAreaField("博客内容", validators=[DataRequired()])
     submit = SubmitField("提交博客")
     submit = SubmitField("提交博客")
 
 
     def __init__(self, **kwargs):
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
         super().__init__(**kwargs)
         self.context.data = "# Blog Title\n## Blog subtitle\nHello, World"
         self.context.data = "# Blog Title\n## Blog subtitle\nHello, World"
+        archive = Archive.get_archive_list()
+        self.archive.choices = [(-1, "None")] + [(i[0], f"{i[1]} ({i[3]})") for i in archive]
 
 
 
 
 class WriteCommentForm(FlaskForm):
 class WriteCommentForm(FlaskForm):
@@ -127,14 +129,14 @@ def create_docx_page(form: WriteBlogForm):
         flash("副标题太长了")
         flash("副标题太长了")
         abort(400)
         abort(400)
 
 
-    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:
-            archive_list.append(f_)
+    archive = []
+    if -1 not in form.archive.data:
+        for i in form.archive.data:
+            i = load_archive_by_id(i)
+            if i is not None:
+                archive.append(i)
 
 
-    if BlogArticle(None, current_user, title, subtitle, form.context.data, archive=archive_list).create():
+    if BlogArticle(None, current_user, title, subtitle, form.context.data, archive=archive).create():
         app.HBlogFlask.print_sys_opt_success_log("write blog")
         app.HBlogFlask.print_sys_opt_success_log("write blog")
         flash(f"博客 {title} 发表成功")
         flash(f"博客 {title} 发表成功")
     else:
     else:

+ 4 - 4
object/archive.py

@@ -1,13 +1,13 @@
 from typing import Optional
 from typing import Optional
 
 
-from sql.archive import get_archive_id_by_name, create_archive, get_archive_list, read_archive, delete_archive
+from sql.archive import get_archive_name_by_id, 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)
+def load_archive_by_id(archive_id: int) -> "Optional[Archive]":
+    archive_name, describe = get_archive_name_by_id(archive_id)
     if archive_id is None:
     if archive_id is None:
         return None
         return None
-    return Archive(name, describe, archive_id)
+    return Archive(archive_name, describe, archive_id)
 
 
 
 
 class Archive:
 class Archive:

+ 3 - 3
sql/archive.py

@@ -41,10 +41,10 @@ def get_archive_list(limit: Optional[int] = None, offset: Optional[int] = None):
     return cur.fetchall()
     return cur.fetchall()
 
 
 
 
-def get_archive_id_by_name(name: str):
+def get_archive_name_by_id(archive_id: int):
     """ 获取归档 ID """
     """ 获取归档 ID """
-    cur = db.search(columns=["ID", "DescribeText"], table="archive",
-                    where=f"Name='{name}'")
+    cur = db.search(columns=["Name", "DescribeText"], table="archive",
+                    where=f"ID={archive_id}")
     if cur is None or cur.rowcount == 0:
     if cur is None or cur.rowcount == 0:
         return None, None
         return None, None
     return cur.fetchone()
     return cur.fetchone()

+ 1 - 1
templates/archive/archive.html

@@ -35,7 +35,7 @@
                                             <p> 是否确认创建归档? </p>
                                             <p> 是否确认创建归档? </p>
                                         </div>
                                         </div>
                                         <div class="modal-footer">
                                         <div class="modal-footer">
-                                            {{ form.submit(class="btn btn-info", value="确认") }}
+                                            {{ form.submit(class="btn btn-danger", value="确认") }}
                                             <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                                             <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                                         </div>
                                         </div>
                                     </div>
                                     </div>

+ 1 - 1
templates/error.html

@@ -12,7 +12,7 @@
         <div class="row">
         <div class="row">
             <div class="col-12 text-center">
             <div class="col-12 text-center">
                 <p><strong> {{ error_info }} </strong></p>
                 <p><strong> {{ error_info }} </strong></p>
-                <a class="btn btn-info" href="{{ url_for("base.index_page") }}"> 回到主页 </a>
+                <a class="btn btn-warning" href="{{ url_for("base.index_page") }}"> 回到主页 </a>
             </div>
             </div>
         </div>
         </div>
     </section>
     </section>