archive.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from flask import Blueprint, render_template, redirect, url_for, flash, g, request
  2. from flask_login import login_required, current_user
  3. from flask_wtf import FlaskForm
  4. from wtforms import StringField, TextAreaField, SubmitField
  5. from wtforms.validators import DataRequired, Length, ValidationError
  6. import app
  7. from object.archive import Archive
  8. from configure import conf
  9. archive = Blueprint("archive", __name__)
  10. class CreateArchiveForm(FlaskForm):
  11. name = StringField("名称", description="归档名称",
  12. validators=[DataRequired(message="必须填写归档名称"),
  13. Length(1, 10, message="归档名称长度1-10个字符")])
  14. describe = TextAreaField("描述", description="归档描述",
  15. validators=[Length(-1, 25, message="归档描述长度25个字符以内")])
  16. submit = SubmitField("创建归档")
  17. def validate_name(self, field):
  18. name = field.data
  19. archive_list = Archive.get_archive_list()
  20. for i in archive_list:
  21. if name == i.name:
  22. raise ValidationError("归档已经存在")
  23. def __load_archive_page(form: CreateArchiveForm):
  24. archive_list = Archive.get_archive_list()
  25. app.HBlogFlask.print_load_page_log("archive list")
  26. return render_template("archive/archive.html",
  27. archive_list=archive_list,
  28. form=form,
  29. show_delete=current_user.check_role("DeleteBlog"))
  30. @archive.route('/')
  31. def archive_page():
  32. return __load_archive_page(CreateArchiveForm())
  33. @archive.route("/create", methods=["POST"])
  34. @login_required
  35. @app.form_required(CreateArchiveForm, "create archive", __load_archive_page)
  36. @app.role_required("WriteBlog", "create archive")
  37. def create_archive_page():
  38. form: CreateArchiveForm = g.form
  39. name = form.name.data
  40. describe = form.describe.data
  41. if Archive.create(name, describe):
  42. app.HBlogFlask.print_sys_opt_success_log(f"Create archive {name}")
  43. flash(f"创建归档 {name} 成功")
  44. else:
  45. app.HBlogFlask.print_sys_opt_fail_log(f"Create archive {name}")
  46. flash(f"创建归档 {name} 失败")
  47. return redirect(url_for("archive.archive_page"))
  48. @archive.route("/delete")
  49. @login_required
  50. @app.role_required("DeleteBlog", "delete archive")
  51. def delete_archive_page():
  52. archive_id = int(request.args.get("archive", 1, type=int))
  53. if Archive(archive_id).delete():
  54. app.HBlogFlask.print_sys_opt_success_log(f"Delete archive {archive_id}")
  55. flash("归档删除成功")
  56. else:
  57. app.HBlogFlask.print_sys_opt_fail_log(f"Delete archive {archive_id}")
  58. flash("归档删除失败")
  59. return redirect(url_for("archive.archive_page"))
  60. @archive.context_processor
  61. @app.cache.cached(timeout=conf["CACHE_EXPIRE"], key_prefix="inject_base:archive")
  62. def inject():
  63. """ archive 默认模板变量 """
  64. return {"top_nav": ["", "active", "", "", "", ""]}