Bläddra i källkod

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

SongZihuan 3 år sedan
förälder
incheckning
270c42d8c8
5 ändrade filer med 21 tillägg och 19 borttagningar
  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_wtf import FlaskForm
 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
 
 import app
 from sql.base import DBBit
 from object.blog import BlogArticle, load_blog_by_id
 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__)
 
@@ -16,13 +16,15 @@ docx = Blueprint("docx", __name__)
 class WriteBlogForm(FlaskForm):
     title = StringField("标题", validators=[DataRequired()])
     subtitle = StringField("副标题", validators=[DataRequired()])
-    archive = StringField("归档")
+    archive = SelectMultipleField("归档", coerce=int)
     context = TextAreaField("博客内容", validators=[DataRequired()])
     submit = SubmitField("提交博客")
 
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
         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):
@@ -127,14 +129,14 @@ def create_docx_page(form: WriteBlogForm):
         flash("副标题太长了")
         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")
         flash(f"博客 {title} 发表成功")
     else:

+ 4 - 4
object/archive.py

@@ -1,13 +1,13 @@
 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:
         return None
-    return Archive(name, describe, archive_id)
+    return Archive(archive_name, describe, archive_id)
 
 
 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()
 
 
-def get_archive_id_by_name(name: str):
+def get_archive_name_by_id(archive_id: int):
     """ 获取归档 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:
         return None, None
     return cur.fetchone()

+ 1 - 1
templates/archive/archive.html

@@ -35,7 +35,7 @@
                                             <p> 是否确认创建归档? </p>
                                         </div>
                                         <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>
                                         </div>
                                     </div>

+ 1 - 1
templates/error.html

@@ -12,7 +12,7 @@
         <div class="row">
             <div class="col-12 text-center">
                 <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>
     </section>