archive.py 2.8 KB

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